Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Возможно ли обрезать файл не перезаписав его?

282
15 января 2011 года
Bard
481 / / 26.02.2006
$(сабж) Вот стало интересно. Ведь можно спокойно дописывать в файл. А если требуется обрезать конец файла? Для решения проблемы конечно можно или считать файл и записать начало обратно, удалив перед етим оригинальный файл, или же переименовать оригинал, прочитать с него начало и записать на место оригинального файла, удалив потом оригинальный файл. В обеих вариантах необходится без удаления оригинального файла. Конечно проблема не актуальна для небольших файлов. Ну а если надо работать с файлом, размер которого превышает разумный? Можно изловчится и манипулировать большими файлами без существенных затрат памяти, но... ето лениво) Неужели нет способа тихо откусить файлу хвост?
282
15 января 2011 года
Bard
481 / / 26.02.2006
Оказывается есть такое чудо как [FONT="Courier New"]ftruncate[/FONT]. Но данная функция принимает аргумент типа [FONT="Courier New"]long[/FONT]. И получается что работать с файлами, размер которых больше 4gb она сможет только будучи заюзаной в шестидесяти четырех битном коде. Ето не есть хорошо.

Забыл сказать что ето всё дело у меня затевается под win32 с уклоном в кроссплатформенность.

Но если забить на stdio и посмотреть что предлагает winapi то тут всплывает [FONT="Courier New"]SetEndOfFile[/FONT]. На msdn'е написано что ето как раз то что мне нужно. Её (ету функцию) можно подружыть со стандартными потоками IO, но тогда получается зависимоть от конкретной платформы.

Конечно можно использовать winapi только под окнами, но неужели std* не располагает более "мощьной" [FONT="Courier New"]ftruncate[/FONT]?
5
15 января 2011 года
hardcase
4.5K / / 09.08.2005
Цитата: Bard
неужели std* не располагает более "мощьной" [FONT="Courier New"]ftruncate[/FONT]?


ftruncate64

260
15 января 2011 года
Ramon
1.1K / / 16.08.2003
Цитата: Bard
но неужели std* не располагает более "мощьной" [FONT="Courier New"]ftruncate[/FONT]?



Это POSIX, а не std. А ftruncate64 даже не POSIX.

PS: И там вообще-то не long, а off_t, что как бы намекает.

282
15 января 2011 года
Bard
481 / / 26.02.2006
[QUOTE=hardcase]ftruncate64[/QUOTE]

Ето мысль. Но у меня в mingw есть только одна такая функция (жаль что без цыферок в конце).

[QUOTE=Ramon]И там вообще-то не long, а off_t, что как бы намекает.[/QUOTE]

Да, но:

types.h
 
Код:
...
#ifndef _OFF_T_
#define _OFF_T_
typedef long _off_t;

#ifndef _NO_OLDNAMES
typedef _off_t  off_t;
#endif
#endif
...
260
15 января 2011 года
Ramon
1.1K / / 16.08.2003
mingw это вообще мерзкая гадость и кроссплатформенностью даже не воняет собственно как и полноценным POSIX'ом впрочем как и WinAPI.
282
15 января 2011 года
Bard
481 / / 26.02.2006
[QUOTE=Ramon]mingw под 64 бита не существует[/QUOTE]

да ну?

[QUOTE=Ramon]а про размерность интегральных типов читайте стандарт.[/QUOTE]

C Language Reference Manual:
 
Код:
Type | Size in Bits (-o32) | Size in Bits (-n32) | Size in Bits (-64)
char        8 8 8
short       16 16 16
int         32 32 32
long        32 32 64
long long   64 64 64
float       32 32 32
double      64 64 64
long double 64 128 128
pointer     32 32 64
260
15 января 2011 года
Ramon
1.1K / / 16.08.2003
Цитата: Bard
да ну?



C Language Reference Manual:
 
Код:
Type | Size in Bits (-o32) | Size in Bits (-n32) | Size in Bits (-64)
char        8 8 8
short       16 16 16
int         32 32 32
long        32 32 64
long long   64 64 64
float       32 32 32
double      64 64 64
long double 64 128 128
pointer     32 32 64



Это не стандарт это фуфло.

PS: А вы соберите mingw'ой нативное 64 битное WinAPI приложение.

282
15 января 2011 года
Bard
481 / / 26.02.2006
[QUOTE=Ramon]А вы соберите mingw'ой нативное 64 битное WinAPI приложение.[/QUOTE]

уже собирал

 
Код:
'P','E',x00,x00,x64,x86


усьо пучком
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог