我没有在文件流中打开文件。有一个“浏览”按钮,单击它后,您可以选择文件,就像所有其他浏览按钮一样。然后文件将在已定义为打开该类型文件的应用程序中打开。例如 pdf 文件将在 adobe 中打开,.txt 将在记事本(或记事本++或任何其他设置为打开的文本编辑器中打开.txt 文件)。我想获取在特定时间加载了该文件的多少内容。有没有办法获取该文件部分加载内容的大小?
问问题
81 次
2 回答
1
我将做出以下假设:
- 您的“预定义应用程序”实际上是一个不受您控制的库,但正在为您读取文件
- 您想知道文件的读取指针前进了多远
- 您可以访问表示“预定义应用程序”正在使用的文件(a
FILE *
或 aifstream
、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
,您将SetFilePointer
在HANDLE
.
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 回答