Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Удаление конца большого файла |
Автор: crazylam 2.6.2007, 11:54 | ||
Здравствуйте! У меня такая проблема: Надо удалить данные из конца большого файла ("обрезать"). Нашел функцию chsize и пишу так:
Но оно не работает на файлах > 4Гб (даже не открывается :(). Есть ли какое-то решение? Или можно отрезать конец как-то по-другом? Подойдет любой способ, работающий по времени хотя бы за длину удаляемого куска или быстрее... |
Автор: apook 2.6.2007, 12:28 |
попробовал твой код на NTFS диске 6 Гб файл изменил без ошибок |
Автор: CrazyPerson 2.6.2007, 14:15 |
Странно - у меня не на 4, не на 6 гигабайтах не заработало... |
Автор: W4FhLF 2.6.2007, 14:29 |
CrazyPerson, что написано в справке к функции? Какого типа второй параметр? DWORD, QWORD? Всё будет зависеть от этого. И под какую систему надо? |
Автор: CrazyPerson 2.6.2007, 15:30 |
W4FhLF, У chsize Второй параметр имеет тип long. Система - windows xp, среда разработки visual studio 2005. Но проблема возникает при достижение open, файл большого размера просто не открывается. |
Автор: W4FhLF 2.6.2007, 15:53 |
CrazyPerson, что тогда возвращает open? Так же ты можешь использовать API: CreateFile, SetFilePointer и SetFileValidData, они позволяют работать с большими файлами. В прицнипе все стандартные функции есть обёртки над системными, поэтому я обычно предпочитаю апи ![]() |
Автор: CrazyPerson 2.6.2007, 16:22 |
open возвращает handle файла, или -1 если файл не удалось открыть. А за API'шные функции спасибо, пойду их мучать. Не можешь написать код с использованием SetFileValidData? ![]() |
Автор: CrazyPerson 2.6.2007, 16:36 |
Доступ к файлу точно есть. Видимо просто не работает процедура с такими большими файлами... Надеюсь что до понедельника уже разберусь с SetFileValidData, но так или иначе большое тебе спасибо. |
Автор: dumb 2.6.2007, 16:48 |
только тебе нужно разбираться с SetFilePointer,SetEndOfFile. и есть подозрение, что гугл может сильно облегчить это разбирательство. |
Автор: CrazyPerson 2.6.2007, 16:55 |
msdn уже сильно облегчил это разбирательство=) |
Автор: Xenon 2.6.2007, 22:11 |
crazylam, а у тебя какая FS ? |
Автор: crazylam 3.6.2007, 15:28 |
NTFS... Сейчас вроде бы проблема решилась... По крайней мере апишные функции маленькие файлы режут нормально, большие по идее тоже должна, осталось потратить 5 минут и понять, какие куда биты (младшие-старшие) надо писать в SetFilePointer(..);... так что всем спасибо ![]() |