从Objective-C中的特定位置读取特定长度的字节
我需要以1MB块的形式一次读取视频文件的字节,并将该数据分配给字节流。在第二次开始读取字节时,它必须从上一次执行的结束点开始读取1MB字节。必须执行此操作,直到读取文件的最后一个字节。我用下面的代码尝试了这个方法,但这个memcpy方法似乎只支持从文件的开头读取1MB大小的数据从Objective-C中的特定位置读取特定长度的字节,objective-c,Objective C,我需要以1MB块的形式一次读取视频文件的字节,并将该数据分配给字节流。在第二次开始读取字节时,它必须从上一次执行的结束点开始读取1MB字节。必须执行此操作,直到读取文件的最后一个字节。我用下面的代码尝试了这个方法,但这个memcpy方法似乎只支持从文件的开头读取1MB大小的数据 //original size value is 1024*1024 do{ if((index+size) > fileSize){ size = file
//original size value is 1024*1024
do{
if((index+size) > fileSize){
size = fileSize-index;
}
Byte *buff = (Byte*)malloc(size);
memcpy(buff, [data2 bytes], size);
//some logic goes here to pass the already read bytes
index+=size;
}while(index<fileSize);
//原始大小值为1024*1024
做{
如果((索引+大小)>文件大小){
大小=文件大小索引;
}
字节*buff=(字节*)malloc(大小);
memcpy(buff,[data2字节],大小);
//有些逻辑在这里传递已经读取的字节
指数+=大小;
}而(index如果memcpy有问题,请使用CopyMemory:
无效复制内存(
__在PVOID目的地中,
__在const VOID*源中,
__大小和长度
))
用法是一样的
你能解释一下你的问题吗?我不明白你的确切意思
关于读取文件时,文件指针会自动移动。请参见此示例:
#include <windows.h>
int main()
{
HANDLE hFile = CreateFile("c:\\a.txt",GENERIC_WRITE|GENERIC_READ,0,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
DWORD read;
BYTE buffer[0x400];
do
{
ReadFile(hFile,buffer,0x400,&read,NULL);
//process the data (buffer)
}while(read);
CloseHandle(hFile);
}
#包括
int main()
{
HANDLE hFile=CreateFile(“c:\\a.txt”,通用写,通用读,0,NULL,总是打开,文件属性,NULL);
德沃德·里德;
字节缓冲区[0x400];
做
{
ReadFile(hFile,buffer,0x400,&read,NULL);
//处理数据(缓冲区)
}边读边读;
闭合手柄(hFile);
}
好的,让我给你举个例子。假设我正在读取的文件大小是5 MB。因此,当第一次执行时,它必须读取视频文件的字节,从0到1024,第二次从1025到2048,第三次从2015到3072等等。使用memcpy,我不能这样做。所以我想知道一种实现它的方法。@cppKoder:欢迎使用Stack溢出。通常情况下,您应该给出一个答案,如果需要,可以通过编辑将新材料添加到以前的答案中。
标记可用于指示“这是后来添加的”(或者有时在更新、更好的答案后保留旧答案)。您没有显示任何“从文件读取”操作。这使得您很难知道自己在做什么。您还没有显示足够的代码;我们无法看到索引或文件大小是如何初始化的。此外,显示的代码严重泄漏内存;您分配内存,但从未释放内存。memcpy()中的[data2 bytes]
符号
可能表示这是Objective-C;(并且可能从流中读取一些数据;我对Objective-C了解得不够,无法对此进行评论,但是缺少data2
和bytes
的定义没有帮助。)小心do{}while()
循环;while(){}
循环通常更好。