0

我没有在文件流中打开文件。有一个“浏览”按钮,单击它后,您可以选择文件,就像所有其他浏览按钮一样。然后文件将在已定义为打开该类型文件的应用程序中打开。例如 pdf 文件将在 adobe 中打开,.txt 将在记事本(或记事本++或任何其他设置为打开的文本编辑器中打开.txt 文件)。我想获取在特定时间加载了该文件的多少内容。有没有办法获取该文件部分加载内容的大小?

4

2 回答 2

1

我将做出以下假设:

  • 您的“预定义应用程序”实际上是一个不受您控制的库,但正在为您读取文件
  • 您想知道文件的读取指针前进了多远
  • 您可以访问表示“预定义应用程序”正在使用的文件(aFILE *或 a ifstream、POSIX 文件描述符或 Windows 文件)的底层对象HANDLE

如果您使用打开文件fopen进行阅读,您将ftell使用FILE *.

FILE *infile;
//...
long position = ftell(infile);

如果您有ifstream,请使用该tellg方法。

std::ifstream infile;
//...
long position = infile.tellg();

如果打开文件以供读取open,则可以lseek在文件描述符上使用。

int infile;
//...
long position = lseek(infile, 0, SEEK_CUR);

如果在 Windows 上打开文件以供阅读OpenFile,您将SetFilePointerHANDLE.

HANDLE infile;
//...
long position = SetFilePointer(infile, 0, 0, FILE_CURRENT);
于 2012-06-26T04:39:28.397 回答
0

如果您使用的是 C++ 流,则可以使用该tellg函数获取文件中的位置。

请注意,这将返回相对于流字符大小的位置。例如,读取 10 个字符istream(使用char)然后tellg将报告 10,但是从 a 读取 10 个字符wistream(使用wchar_t)然后报告的数量将是 20 或 40,具体取决于 的大小wchar_t

于 2012-06-26T05:15:14.590 回答