![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
crazylam |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 19.5.2007 Репутация: нет Всего: нет |
Здравствуйте! У меня такая проблема:
Надо удалить данные из конца большого файла ("обрезать"). Нашел функцию chsize и пишу так:
Но оно не работает на файлах > 4Гб (даже не открывается :(). Есть ли какое-то решение? Или можно отрезать конец как-то по-другом? Подойдет любой способ, работающий по времени хотя бы за длину удаляемого куска или быстрее... Это сообщение отредактировал(а) crazylam - 2.6.2007, 11:55 |
|||
|
||||
apook |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 794 Регистрация: 12.7.2006 Репутация: 9 Всего: 23 |
попробовал твой код на NTFS диске 6 Гб файл изменил без ошибок
-------------------- Мои руки из дуба, голова из свинца ну и пусть ... |
|||
|
||||
CrazyPerson |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 26.4.2007 Где: Санкт-Петербург Репутация: нет Всего: нет |
Странно - у меня не на 4, не на 6 гигабайтах не заработало...
|
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 20 Всего: 121 |
CrazyPerson, что написано в справке к функции? Какого типа второй параметр? DWORD, QWORD? Всё будет зависеть от этого. И под какую систему надо?
-------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
CrazyPerson |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 26.4.2007 Где: Санкт-Петербург Репутация: нет Всего: нет |
W4FhLF, У chsize Второй параметр имеет тип long. Система - windows xp, среда разработки visual studio 2005.
Но проблема возникает при достижение open, файл большого размера просто не открывается. |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 20 Всего: 121 |
CrazyPerson, что тогда возвращает open?
Так же ты можешь использовать API: CreateFile, SetFilePointer и SetFileValidData, они позволяют работать с большими файлами. В прицнипе все стандартные функции есть обёртки над системными, поэтому я обычно предпочитаю апи ![]() -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
CrazyPerson |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 26.4.2007 Где: Санкт-Петербург Репутация: нет Всего: нет |
open возвращает handle файла, или -1 если файл не удалось открыть.
А за API'шные функции спасибо, пойду их мучать. Не можешь написать код с использованием SetFileValidData? ![]() Это сообщение отредактировал(а) CrazyPerson - 2.6.2007, 16:24 |
|||
|
||||
W4FhLF |
|
||||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 20 Всего: 121 |
А доступ к нему есть? Может он занят другим приложением или only read?
Нет, у меня на этом компе нет ни студии, ни MSDN, поэтому или до понедельника, или сам ![]() -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
||||
|
|||||
CrazyPerson |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 26.4.2007 Где: Санкт-Петербург Репутация: нет Всего: нет |
Доступ к файлу точно есть. Видимо просто не работает процедура с такими большими файлами...
Надеюсь что до понедельника уже разберусь с SetFileValidData, но так или иначе большое тебе спасибо. |
|||
|
||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 8 Всего: 158 |
||||
|
||||
CrazyPerson |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 26.4.2007 Где: Санкт-Петербург Репутация: нет Всего: нет |
msdn уже сильно облегчил это разбирательство=)
|
|||
|
||||
Xenon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
crazylam, а у тебя какая FS ?
|
|||
|
||||
crazylam |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 19.5.2007 Репутация: нет Всего: нет |
NTFS...
Сейчас вроде бы проблема решилась... По крайней мере апишные функции маленькие файлы режут нормально, большие по идее тоже должна, осталось потратить 5 минут и понять, какие куда биты (младшие-старшие) надо писать в SetFilePointer(..);... так что всем спасибо ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |