Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление конца большого файла, Очень большого... 
:(
    Опции темы
crazylam
Дата 2.6.2007, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 19.5.2007

Репутация: нет
Всего: нет



Здравствуйте! У меня такая проблема:

Надо удалить данные из конца большого файла ("обрезать"). Нашел функцию chsize и пишу так:

Код

#include <io.h>
#include <fcntl.h>

int main()
{
    int fh;
    if ( (fh = open( "file.dat", _O_RDWR)) != -1) {
        chsize( fh, 45000000 );
    }
    return 0;
}



Но оно не работает на файлах > 4Гб (даже не открывается :(). Есть ли какое-то решение? Или можно отрезать конец как-то по-другом? Подойдет любой способ, работающий по времени хотя бы за длину удаляемого куска или быстрее...

Это сообщение отредактировал(а) crazylam - 2.6.2007, 11:55
PM MAIL   Вверх
apook
Дата 2.6.2007, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



попробовал твой код на NTFS диске 6 Гб файл изменил без ошибок


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
CrazyPerson
Дата 2.6.2007, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 26.4.2007
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Странно - у меня не на 4, не на 6 гигабайтах не заработало...
PM MAIL ICQ   Вверх
W4FhLF
Дата 2.6.2007, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



CrazyPerson, что написано в справке к функции? Какого типа второй параметр? DWORD, QWORD? Всё будет зависеть от этого. И под какую систему надо?


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
CrazyPerson
Дата 2.6.2007, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 26.4.2007
Где: Санкт-Петербург

Репутация: нет
Всего: нет



W4FhLF, У chsize Второй параметр имеет тип long. Система - windows xp, среда разработки visual studio 2005.
Но проблема возникает при достижение open, файл большого размера просто не открывается.
PM MAIL ICQ   Вверх
W4FhLF
Дата 2.6.2007, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



CrazyPerson, что тогда возвращает open? 

Так же  ты можешь использовать API: CreateFile, SetFilePointer и SetFileValidData, они позволяют работать с большими файлами. В прицнипе все стандартные функции есть обёртки над системными, поэтому я обычно предпочитаю апиsmile


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
CrazyPerson
Дата 2.6.2007, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 26.4.2007
Где: Санкт-Петербург

Репутация: нет
Всего: нет



open возвращает handle файла, или -1 если файл не удалось открыть.
А за API'шные функции спасибо, пойду их мучать. Не можешь написать код с использованием SetFileValidData? smile 

Это сообщение отредактировал(а) CrazyPerson - 2.6.2007, 16:24
PM MAIL ICQ   Вверх
W4FhLF
Дата 2.6.2007, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



Цитата(CrazyPerson @  2.6.2007,  16:22 Найти цитируемый пост)
open возвращает handle файла, или -1 если файл не удалось открыть.


А доступ к нему есть? Может он занят другим приложением или only read? 

Цитата(CrazyPerson @  2.6.2007,  16:22 Найти цитируемый пост)
А за API'шные функции спасибо, пойду их мучать. Не можешь написать код с использованием SetFileValidData?  


Нет, у меня на этом компе нет ни студии, ни MSDN, поэтому или до понедельника, или сам smile





--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
CrazyPerson
Дата 2.6.2007, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 26.4.2007
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Доступ к файлу точно есть. Видимо просто не работает процедура с такими большими файлами...
Надеюсь что до понедельника уже разберусь с SetFileValidData, но так или иначе большое тебе спасибо.
PM MAIL ICQ   Вверх
dumb
Дата 2.6.2007, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 8
Всего: 158



Цитата(CrazyPerson @  2.6.2007,  16:36 Найти цитируемый пост)
Надеюсь что до понедельника уже разберусь с SetFileValidData

только тебе нужно разбираться с SetFilePointer,SetEndOfFile. и есть подозрение, что гугл может сильно облегчить это разбирательство.
PM MAIL   Вверх
CrazyPerson
Дата 2.6.2007, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 26.4.2007
Где: Санкт-Петербург

Репутация: нет
Всего: нет



msdn уже сильно облегчил это разбирательство=)
PM MAIL ICQ   Вверх
Xenon
Дата 2.6.2007, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



crazylam, а у тебя какая FS ?


--------------------
user posted image  
PM MAIL   Вверх
crazylam
Дата 3.6.2007, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 19.5.2007

Репутация: нет
Всего: нет



NTFS...

Сейчас вроде бы проблема решилась... По крайней мере апишные функции маленькие файлы режут нормально, большие по идее тоже должна, осталось потратить 5 минут и понять, какие куда биты (младшие-старшие) надо писать в SetFilePointer(..);... так что всем спасибо smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0716 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.