Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 从某个偏移量检查文件而不读取整个文件_C_Arrays_Optimization_Byte - Fatal编程技术网

C 从某个偏移量检查文件而不读取整个文件

C 从某个偏移量检查文件而不读取整个文件,c,arrays,optimization,byte,C,Arrays,Optimization,Byte,我想做的是打开一个文件(非常大),然后从某个字节点读取到某个偏移量 在c#中,这可以通过以下方式完成: File.ReadAllBytes(file).Skip(50).Take(10).ToArray(); 问题是它读取整个文件,但由于我的文件可以被拥抱,这也需要很长时间。有没有一种方法可以像这种方法一样读取部分文件,但不读取整个文件?在c中,最好使用标准库函数将(“搜索”)移动到所需位置: FILE *in = fopen("myfancyfile.dat", "rb"); if(fsee

我想做的是打开一个文件(非常大),然后从某个字节点读取到某个偏移量

在c#中,这可以通过以下方式完成:

File.ReadAllBytes(file).Skip(50).Take(10).ToArray();
问题是它读取整个文件,但由于我的文件可以被拥抱,这也需要很长时间。有没有一种方法可以像这种方法一样读取部分文件,但不读取整个文件?在c中,最好使用标准库函数将(“搜索”)移动到所需位置:

FILE *in = fopen("myfancyfile.dat", "rb");
if(fseek(in, 50, SEEK_SET) == 0)
{
  char buf[10];
  if(fread(buf, sizeof buf, 1, in) == 1)
  {
    /* got the data, process it here */
  }
}
fclose(in);
是,使用标准库函数将(“搜索”)移动到所需位置:

FILE *in = fopen("myfancyfile.dat", "rb");
if(fseek(in, 50, SEEK_SET) == 0)
{
  char buf[10];
  if(fread(buf, sizeof buf, 1, in) == 1)
  {
    /* got the data, process it here */
  }
}
fclose(in);
是,使用标准库函数将(“搜索”)移动到所需位置:

FILE *in = fopen("myfancyfile.dat", "rb");
if(fseek(in, 50, SEEK_SET) == 0)
{
  char buf[10];
  if(fread(buf, sizeof buf, 1, in) == 1)
  {
    /* got the data, process it here */
  }
}
fclose(in);
是,使用标准库函数将(“搜索”)移动到所需位置:

FILE *in = fopen("myfancyfile.dat", "rb");
if(fseek(in, 50, SEEK_SET) == 0)
{
  char buf[10];
  if(fread(buf, sizeof buf, 1, in) == 1)
  {
    /* got the data, process it here */
  }
}
fclose(in);

请参阅
seek
fseek
函数。请参阅
seek
fseek
函数。请参阅
seek
fseek
函数。值得注意的是,如果您的文件非常大(>2GB),并且您使用的是32位Windows应用程序,如果需要搜索超过2GB标记,这种方法将不起作用,因为32位长的int将无法保持所需的偏移量。您需要一种不同的方法,正如在这个问题中提到的:thx的快速回复我的文件可以超过200gb大。我的程序只在linux上运行,所以这可能不是问题?对于32位linux也是问题。这个答案也可能对你有所帮助。这正是您所需要的,涵盖了Windows和Linux:这里提供了有关32位Linux下C处理大型文件的更多详细信息:值得注意的是,如果您的文件非常大(>2GB),并且您使用的是32位Windows应用程序,如果您需要查找超过2GB的文件,这种方法将不起作用,因为32位长的int将无法保持所需的偏移量。您需要一种不同的方法,正如在这个问题中提到的:thx的快速回复我的文件可以超过200gb大。我的程序只在linux上运行,所以这可能不是问题?对于32位linux也是问题。这个答案也可能对你有所帮助。这正是您所需要的,涵盖了Windows和Linux:这里提供了有关32位Linux下C处理大型文件的更多详细信息:值得注意的是,如果您的文件非常大(>2GB),并且您使用的是32位Windows应用程序,如果您需要查找超过2GB的文件,这种方法将不起作用,因为32位长的int将无法保持所需的偏移量。您需要一种不同的方法,正如在这个问题中提到的:thx的快速回复我的文件可以超过200gb大。我的程序只在linux上运行,所以这可能不是问题?对于32位linux也是问题。这个答案也可能对你有所帮助。这正是您所需要的,涵盖了Windows和Linux:这里提供了有关32位Linux下C处理大型文件的更多详细信息:值得注意的是,如果您的文件非常大(>2GB),并且您使用的是32位Windows应用程序,如果您需要查找超过2GB的文件,这种方法将不起作用,因为32位长的int将无法保持所需的偏移量。您需要一种不同的方法,正如在这个问题中提到的:thx的快速回复我的文件可以超过200gb大。我的程序只在linux上运行,所以这可能不是问题?对于32位linux也是问题。这个答案也可能对你有所帮助。这正是您所需要的,涵盖了Windows和Linux:有关在32位Linux下从C处理大型文件的更多详细信息,请参见: