| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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(..);... так что всем спасибо |