0

Как урезать размер текстового файла? Например в конце файла есть 5 пробелов, как обрезать конец файла на 5 байт?

1
  • Программу, которая делает truncate -s -5 file ? Или truncate -s -7 file ?
    – alexlz
    13 мая 2011 в 4:06

2 ответа 2

2
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
int main(int argc, char *argv[]) {
    struct stat s;
    stat(argv[1], &s);
    truncate(argv[1], s.st_size - 5);
    return 0;
}

Так пойдёт?

9
  • alexlz, Напишите пожалуйста пример для конкретного файла. И почемуто мои компилятор не понимает "truncate". Kомпилятор C-Free 4.0
    – alexl1720p
    13 мая 2011 в 8:32
  • В Винде gcc MinGW тоже не понимает. Откройте файл f=fopen(...,"r+") и делайте ftruncate(fileno(f),size)
    – avp
    13 мая 2011 в 9:18
  • Пример для конкретного файла - это содержимое "до" и "после"? Да любое... В приведённом тексте имя файла задаётся первым параметром командной строки argv[1]. Используются юниксовые вызовы, поэтому у Вас их может не быть. У меня WinXP SP2, cygwin. Как это сделать с помощью fopen/fseek/fwrite - затрудняюсь ответить.
    – alexlz
    13 мая 2011 в 9:42
  • И насчёт mingw - там ограниченная поддержка posix- и/или юниксовых вызовов.
    – alexlz
    13 мая 2011 в 9:45
  • Если собираете на Windows, то для Windows есть аналог POSIX trancate - это _chsize. 13 мая 2011 в 10:00
2

Windows-версия:

int f;

if (_sopen_s(&f, "filename", _O_RDWR, _SH_DENYNO, _S_IREAD | _S_IWRITE)) {
     _chsize(f, filesize);
     _close(f);
}
2
  • Так это по сути ftruncate(). truncate() принимает имя файла.
    – avp
    13 мая 2011 в 14:10
  • @alexl1720p Вам стоит задать новый вопрос, вместо создания комментария: в нем слишком много кода. 14 мая 2011 в 8:09

Ваш ответ

By clicking “Отправить ответ”, you agree to our terms of service and acknowledge you have read our privacy policy.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками или задайте свой вопрос.