2011-07-13 5 views
0

У меня есть файл на окнах. Я пишу на C++. У меня проблема, когда мне нужно удалить несколько байтов с конца файла. Я использую ifstream, но я не знаю, как удалить эти символы, просто положить '\ 0' в файл или что?Изменение двоичного файла

+2

'iofstream'? Ты уверен? –

ответ

2

На Linux машинах, использование усечь(): http://linux.die.net/man/2/truncate

На машинах Windows, используйте SetEndOfFile():

http://msdn.microsoft.com/en-us/library/aa365531%28v=vs.85%29.aspx

Обе ОС зависимых вызовов.

+0

Использование SetEndOfFile для окон. Мне нужно найти место, где я хочу быть, и затем я использую этот метод? Если я снова открою его и перейду в EOF, это будет новый размер? –

+0

обновлено ... см. Ссылку. написано, что вам нужно искать место, где вы хотите, чтобы ваш «EOF» был. –

2

Почему бы не обрезать файл? Посмотрите на метод chsize().

+0

Я не вижу его в API ifstream –

+0

, он не является частью iostreams, это отдельный метод, который вы вызываете с файлом, - который изменит размер файла (и, следовательно, удалит завершающие байты - что, по-видимому, вы хотите?) – Nim

+0

Использование chsize для окон. Если я снова открою его и перейду в EOF, это будет новый размер? –

2

Вы не можете переносить размер файла; единственный способ сделать это - скопировать файл в временный, затем удалить оригинал и переименовать временный.

Если это всего лишь случай усечения файла, то Windows и Unix (но не обязательно другие системы) имеют функции системного уровня, которые могут это сделать, но в стандарте, поддерживающем его, нет ничего. И если вам когда-либо удастся удалить байты, отличные от конца, ни Windows, ни Unix не позволяют это (хотя некоторые другие системы делают, по крайней мере, в конкретных случаях).

+0

Мне нужно сделать это только в конце, а не в середине или в начале. Мой вопрос: если я использую его в Windows, будут ли обновлены все другие внутренние параметры ОС для изменения? –

+0

Если вы хотите использовать boost, 1.46 теперь поддерживает метод 'resize()', который должен позволить степень переносимости - почему он не был включен с самого начала, это тайна ... – Nim

+0

@ Roman Если вы используете зависящей от системы, он будет выполнять то, что система указывает на это. Если в спецификациях системы указано, что он обрезает файл, он обрезает файл (или в системе есть ошибка). –

Смежные вопросы