C++ ofstream无法打开现有文件,具体取决于文件大小

C++ ofstream无法打开现有文件,具体取决于文件大小,c++,windows,ofstream,C++,Windows,Ofstream,我注意到,std::ofstream有时无法打开现有文件。经过一点调查,我发现问题取决于要打开的文件的大小 例如,我使用以下代码尝试打开4 GiB标记周围的文件: #包括 #包括 #包括 constexpr size\u t运算符“”\u MiB(无符号长i) { 返回i*1024*1024; } constexpr size\u t运算符“”\u GiB(无符号长i) { 返回i*1024*1024*1024; } int main(int argc,char*argv[]) { 对于(大小文

我注意到,
std::ofstream
有时无法打开现有文件。经过一点调查,我发现问题取决于要打开的文件的大小

例如,我使用以下代码尝试打开4 GiB标记周围的文件:

#包括
#包括
#包括
constexpr size\u t运算符“”\u MiB(无符号长i)
{
返回i*1024*1024;
}
constexpr size\u t运算符“”\u GiB(无符号长i)
{
返回i*1024*1024*1024;
}
int main(int argc,char*argv[])
{
对于(大小文件大小{4_GiB-3_MiB};文件大小<4_GiB+12_MiB;文件大小+=1_MiB)
{
移除(“测试原始”);
std::ofstream os{“test.raw”,std::ofstream::binary};
std::unique_ptr缓冲区{std::make_unique(fileSize)};
write(buffer.get(),fileSize);
os.close();
std::ofstream os1{“test.raw”,std::ofstream::binary};

STD::4 GB是一个常见的文件系统限制。所以我假设它与C++无关,而只与你的操作系统,即你试图使用文件的卷的文件系统。你是否进入了代码> FSturt C.Tor?在哪里实现失败?@ SuthLokku也是我的第一个想法,但是又截断了FIL。4 GiB+8 MiB的es工作正常。类似地,截断8 GiB文件工作正常,而7.5 GiB文件不工作。您尝试过为x64编译它吗?@DDrmmr我能进入的最深处是open,它由构造函数调用。在open内,_Fiopen(_Filename,_Mode,_Prot)被调用并失败,但这是一个我无法介入的内在函数。
4093 MiB os1.good(): 1
4094 MiB os1.good(): 1
4095 MiB os1.good(): 1
4096 MiB os1.good(): 0
4097 MiB os1.good(): 0
4098 MiB os1.good(): 0
4099 MiB os1.good(): 0
4100 MiB os1.good(): 0
4101 MiB os1.good(): 0
4102 MiB os1.good(): 0
4103 MiB os1.good(): 0
4104 MiB os1.good(): 1
4105 MiB os1.good(): 1
4106 MiB os1.good(): 1
4107 MiB os1.good(): 1