有没有办法通过程序在特定时间获取文件部分加载内容的大小C++

Is there any way to get the size of the partially loaded content of a file at a particular time through C++ program?

本文关键字:加载 C++ 文件部 获取 过程 程序 定时间 有没有      更新时间:2023-10-16

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

我将做出以下假设:

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

如果使用fopen打开文件进行读取,则将在FILE *上使用ftell

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 打开文件以供读取,您将在 HANDLE 上使用 SetFilePointer

HANDLE infile;
//...
long position = SetFilePointer(infile, 0, 0, FILE_CURRENT);

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

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