Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.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++ 如何在Windows上查看4GB以上的KG()文件?_C++_Large Files_Unsigned Long Long Int - Fatal编程技术网

C++ 如何在Windows上查看4GB以上的KG()文件?

C++ 如何在Windows上查看4GB以上的KG()文件?,c++,large-files,unsigned-long-long-int,C++,Large Files,Unsigned Long Long Int,我使用的是Windows 7、64位和NTFS。 我正在构建一个必须是32位的DLL。我有一个非常简单的例程,我想在C++中实现。我正在使用以下命令读取一个大文件: unsigned long p; ifstream source(file); streampos pp(p); source.seekg(pp); 对于4GB以上的文件,我尝试使用unsignedlong-long,但它不起作用。 我做错了什么?我使用的是GNU GCC,尝试MSVC Express 2008/2010是否有用

我使用的是Windows 7、64位和NTFS。 我正在构建一个必须是32位的DLL。我有一个非常简单的例程,我想在C++中实现。我正在使用以下命令读取一个大文件:

unsigned long p;
ifstream source(file);
streampos pp(p);
source.seekg(pp);
对于4GB以上的文件,我尝试使用unsignedlong-long,但它不起作用。 我做错了什么?我使用的是GNU GCC,尝试MSVC Express 2008/2010是否有用

更新:


我的GCC似乎有点问题。现在,我正在用MSVC测试你的提案,看起来效果不错。MSVC使用一个_int64来表示streampos/streamoff对象,我稍后将与GCC一起检查。

您可能需要使用一些相对搜索,即使用seekg的两个参数重载


您可能需要使用多个相对搜索,即使用seekg的双参数重载


我相信您必须使用本机Win32调用来完成这项工作,如SetFilePointerEx

我相信您必须使用本机Win32调用来完成这项工作,如SetFilePointerEx

如果您在32位系统上运行,您可能不太幸运,因为这样做很简单,尽管streams库可以免费使用64位字作为其pos类型。但是,使用相对搜索可能有效。由于all seek返回一个pos_类型,该类型应该指示当前位置,因此这可能仍然不能很好地工作


我想这只是我,但我从来没有发现寻求太有用了。当然实现了这种混乱之后,我还意识到搜索必然会扼杀性能,而且它只有在使用以std::ios_base::binary模式打开的文件时才真正起作用,而这些文件不使用代码转换。

如果您在32位系统上运行,那么您可能会运气不佳,尽管streams库可以免费使用64位其位置类型的位字。但是,使用相对搜索可能有效。由于all seek返回一个pos_类型,该类型应该指示当前位置,因此这可能仍然不能很好地工作


我想这只是我,但我从来没有发现寻求太有用了。当然,在实现了这种混乱之后,我也意识到搜索必然会扼杀性能,而且它只有在使用以std::ios_base::binary模式打开的文件时才真正起作用,而这些文件不使用代码转换。

我遇到了这样的情况:我遇到了这样的情况:这是我的第一个想法,但我试图避免这种情况。我正在建设一个我希望跨平台的图书馆。最后,我希望该库在Python中使用,Python本身就是跨平台的,支持+4GB的文件访问。在文档中,他们建议使用MSVC构建Windows部署,这是我测试MSVC的第一个提示。这是我的第一个想法,但我试图避免。我正在建设一个我希望跨平台的图书馆。最后,我希望该库在Python中使用,Python本身就是跨平台的,支持+4GB的文件访问。在文档中,他们建议使用MSVC构建Windows部署,这是我测试MSVC的第一个提示。seek操作实际上是从一个非常大的文件中检索非常小的信息,因此seek应该是有意义的。文件确实是以二进制文件的形式打开的。seek操作实际上是从一个非常大的文件中检索非常小的信息,因此seek应该是有意义的。文件确实是以二进制文件打开的。
// Start with seeking from the beginning
source.seekg(some_pos, std::ios::beg);

// Then seek some more from that position
source.seekg(some_offset, std::ios::cur);