Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.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+中查找大于4GB的文件+;?_C++_Visual Studio_Stl_Iostream - Fatal编程技术网

C++ 在C+中查找大于4GB的文件+;?

C++ 在C+中查找大于4GB的文件+;?,c++,visual-studio,stl,iostream,C++,Visual Studio,Stl,Iostream,我正在使用MS Visual Studio 2012编译器,并且正在以x64发布模式构建 使用ifstream,我可以读取大于4GB的文件。问题是,我找不到一个10GB文件中间的位置。 当我像这样使用seekg时is.seekg(5368709120,is.beg)thenis.tellg()返回-1,表示搜索失败。我确信文件存在,位置5368709120也存在。如果我使用:is.seekg(100,is.beg)例如 使用多个搜索不是一个选项,因为文件可以达到300GB(并且使用多个搜索会很慢

我正在使用MS Visual Studio 2012编译器,并且正在以x64发布模式构建

使用ifstream,我可以读取大于4GB的文件。问题是,我找不到一个10GB文件中间的位置。

当我像这样使用seekg时
is.seekg(5368709120,is.beg)
then
is.tellg()返回-1,表示搜索失败。我确信文件存在,位置5368709120也存在。如果我使用:
is.seekg(100,is.beg)例如

使用多个搜索不是一个选项,因为文件可以达到300GB(并且使用多个搜索会很慢)

我的问题是:如何让seek在不使用多个seek的情况下在10GB文件上正常工作?

如何让seek在不使用多个seek的情况下在10GB文件上正常工作

暂时忘记了文章的其余部分,这个问题的答案(在Windows中)非常简单:使用。我认为在处理大型文件时,降低到较低级别的API没有问题——您很可能正在执行大数据块读/写操作,对吗?您可以很容易地使用
fread
fwrite
来实现这一点


如果你坚持使用STL,微软的实现就行不通了。我听说STLPort处理大文件查找,所以您可以这样做。虽然这是一个相当严厉的方法,但我还是坚持基本的
fseek

在这里查看答案,因为它可能与您试图做的相同。感谢各位的评论,但没有一个链接可以解决我的问题。我看到两个建议的备选问答;这两个问题的答案都不是很令人满意。关于这个问题的最后一条评论断言,微软的一些流函数的实现存在缺陷,在应该使用64位版本时使用32位版本。您是否尝试使用
5368709120ULL
确保常量没有被截断?非常感谢您的回答!我将使用
\u fseeki64
\u ftelli64
查找文件并获取当前位置。有没有办法使用“fread”和“fwrite”一次读取或写入超过4GB的数据?老实说,UDMA不适合这种访问。即使您将整个Gig的数据存储在内存中(您不应该这样做),您也将使用小型缓冲区将数据传输到磁盘。现在32-64MB最适合使用。如果内存中有整个缓冲区,不要制作较小的缓冲区并将数据复制到
fwrite
,从大缓冲区发送
fwrite
调用,并带有偏移量和所需的操作长度。但是,如果您确实在处理大文件,那么无论如何都应该使用内存映射文件和普通内存块复制。那会给你最好的表现。