Обрезка файла C++

110
11 октября 2021, 14:30

Есть у меня файл :

ifstream file;

Как обрезать файл на нужное количество байт?К примеру на 5.

Answer 1

Обрезаем файл "c:/tmp/a.c" на 5 байт:

#include <filesystem>
int main()
{
    uintmax_t n = std::filesystem::file_size("c:/tmp/a.c");
    std::filesystem::resize_file("c:/tmp/a.c", n - 5);
    return 0;
}

работоспособность зависит, от того, какая версия у вас компилятора, на VS2015 например надо делать std::experimental::filesystem

Answer 2
  1. Открываете свой файл на чтение.
  2. Открываете новый файл на запись.
  3. Читаете из своего файла 5 байт.
  4. Пишете эти 5 байт в файл на запись.
  5. Закрываете оба файла.
  6. Enjoy.

UPD1:

И да, читать и писать байты рекомендуется в бинарном режиме, если уж речь идет об обрезании файла с точностью до байта.

Answer 3

Спасибо всем за ответы. Я сделал уже сам. Вот как я сделал:

if (_sopen_s(&handle,c, _O_RDWR, _SH_DENYNO, _S_IREAD | _S_IWRITE) == 0)
 {
    d = _filelength(handle);
    cout << "Размер файла :" << d << endl;
    if (d > 10)
    {
        e = _chsize(handle, d - 5);
    }
    else
    {
        cout << "Файл меньше 10-ти байт" << endl;
    }