[英]Partially truncating a stream (fstream or ofstream) in C++
我試圖使用fstream部分截斷(或縮短)現有文件。 我曾嘗試過寫一個EOF角色,但這似乎什么也沒做。
任何幫助,將不勝感激...
我認為你不能。 有很多函數可以在HANDLE<->int<->FILE *
“上下”移動包裝器層次結構,至少在Windows上,但是沒有“正確”從iostreams對象中提取FILE *
(如果確實如此)它甚至實現了一個)。
您可能會發現這個問題對您有所幫助。
就個人而言,我強烈建議避開iostreams,它們的設計很差,很重要的C ++,並且看起來很討厭。 看看Boost的iostreams ,或者如果你需要使用類,請包裝stdio.h 。
stdio的相關函數是ftruncate() 。
Boost.Interprocess庫定義了一個可移植的truncate
函數。 由於某種原因,它沒有記錄,但你可以找到它頭文件 。
這取決於操作系統。 大多數操作系統都支持這種方式,但方式不同。 在Windows上,有一個SetEndOfFile()
。 在Unix和類似的系統,你lseek
到你想要的文件結束,並做一個lwrite
的零個字節存在。 其他操作系統無疑使用其他方法。
我最后咬了一下子彈並讀取了要保存到陣列的文件部分然后重新編寫它。 這不是最好的解決方案 - 但由於文件總是很小,我決定接受這種方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.