从Objective-C中的特定位置读取特定长度的字节

从Objective-C中的特定位置读取特定长度的字节,objective-c,Objective C,我需要以1MB块的形式一次读取视频文件的字节,并将该数据分配给字节流。在第二次开始读取字节时,它必须从上一次执行的结束点开始读取1MB字节。必须执行此操作,直到读取文件的最后一个字节。我用下面的代码尝试了这个方法,但这个memcpy方法似乎只支持从文件的开头读取1MB大小的数据 //original size value is 1024*1024 do{ if((index+size) > fileSize){ size = file

我需要以1MB块的形式一次读取视频文件的字节,并将该数据分配给字节流。在第二次开始读取字节时,它必须从上一次执行的结束点开始读取1MB字节。必须执行此操作,直到读取文件的最后一个字节。我用下面的代码尝试了这个方法,但这个memcpy方法似乎只支持从文件的开头读取1MB大小的数据

    //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(){}
循环通常更好。