【发布时间】:2010-02-14 15:49:10
【问题描述】:
我正在尝试使用 fstream 部分截断(或缩短)现有文件。我曾尝试编写 EOF 字符,但这似乎无济于事。
任何帮助将不胜感激......
【问题讨论】:
标签: c++ file truncate fstream ofstream
我正在尝试使用 fstream 部分截断(或缩短)现有文件。我曾尝试编写 EOF 字符,但这似乎无济于事。
任何帮助将不胜感激......
【问题讨论】:
标签: c++ file truncate fstream ofstream
我不认为你可以。有许多函数可以“上下”移动HANDLE<->int<->FILE * 的包装层次结构,至少在 Windows 上是这样,但是没有“适当的”方法可以从 iostreams 对象中提取 FILE *(如果它确实是用一个)。
您可以找到this question 提供帮助。
就我个人而言,我强烈建议不要使用 iostream,它们的设计很糟糕,大量使用 C++,而且看起来很难看。看看Boost's iostreams,如果你需要使用类,或者包装stdio.h。
stdio的相关函数是ftruncate()。
【讨论】:
Boost.Interprocess 库定义了一个可移植的truncate 函数。出于某种原因,它没有记录在案,但您可以找到它this header file。
【讨论】:
ftruncate 在 Posix 中是可移植的。但它当然不使用 C++ 流。
这取决于操作系统。大多数操作系统都支持这一点,但方式不同。在 Windows 上,有一个 SetEndOfFile()。在 Unix 和类似系统上,您 lseek 到您希望文件结束的位置,并在那里执行一个零字节的 lwrite。其他操作系统无疑使用其他方法。
【讨论】:
ftruncate(2)。
最后我咬紧牙关,读取文件中要保存到数组的部分,然后重新编写它。这不是最好的解决方案 - 但由于文件总是很小,我决定接受这种方法。
【讨论】: