C++ 在C+中部分截断流(fstream或ofstream)+;

C++ 在C+中部分截断流(fstream或ofstream)+;,c++,file,truncate,fstream,ofstream,C++,File,Truncate,Fstream,Ofstream,我正在尝试使用fstream部分截断(或缩短)现有文件。我试着写一个EOF角色,但这似乎没用 任何帮助都将不胜感激……这将取决于操作系统。大多数操作系统都支持这一点,但方式不同。在Windows上,有一个SetEndOfFile()。在Unix和类似的系统上,您可以lseek到希望文件结束的位置,并在那里执行零字节的lwrite。其他操作系统无疑会使用其他方法。我认为你不能。至少在Windows上,有许多函数可以“上下”移动HANDLEintFILE*的包装层次结构,但是没有“适当”的函数可以从

我正在尝试使用fstream部分截断(或缩短)现有文件。我试着写一个EOF角色,但这似乎没用


任何帮助都将不胜感激……

这将取决于操作系统。大多数操作系统都支持这一点,但方式不同。在Windows上,有一个
SetEndOfFile()
。在Unix和类似的系统上,您可以
lseek
到希望文件结束的位置,并在那里执行零字节的
lwrite
。其他操作系统无疑会使用其他方法。

我认为你不能。至少在Windows上,有许多函数可以“上下”移动
HANDLEintFILE*
的包装层次结构,但是没有“适当”的函数可以从iostreams对象中提取
文件*
(如果确实是用一个对象实现的话)

你可能会发现有帮助

我强烈建议转向IOFFACTS,它们设计得不好,C++非常严重,而且很难看。如果需要使用类,请查看或包装


stdio的相关函数是。

库定义了一个可移植的
截断
函数。由于某些原因,它没有被记录下来,但你可以找到它。

我最后咬了一口,读取了文件中要保存到数组中的部分,然后重新写入了它。这不是最好的解决方案-但由于文件总是很小,我决定接受这种方法。

在Unix上肯定会使用
ftruncate(2)
ftruncate
与Posix一样是可移植的。但是它不使用C++流。是的,我指的是POSIX和Win32的便携。为什么不直接使用C文件I/O直接做它,而不是围绕C++流(这似乎是你的任务的错误工具)的限制来工作?