![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| roko |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 2.3.2008 Репутация: нет Всего: нет |
Как можно записать файл на диск, если его размер заранее неизвестен? Например, длина файла может быть 10 байт, а может 10Гб. Если использовать mapping и в CreateFileMapping передать максимальный размер файла(его можно вычислить), то на диске резервируется вся память для файла. Получается что если максимальный размер файла 10Гб, а на деле файл займет 10 байт, то выходит что если надиске нету свободных 10Гб чтобы зарезервировать место для файла максимального размера, файл размером 10 байт нельзя записать. Думал что можно обойтись разреженными файлами, но они вроде для NTFS. Как быть с FAT32?
|
|||
|
||||
| bra1ny |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 26.12.2008 Репутация: 2 Всего: 3 |
а частями мапить?
Это сообщение отредактировал(а) bra1ny - 7.1.2010, 23:45 --------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России. |
|||
|
||||
| roko |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 2.3.2008 Репутация: нет Всего: нет |
bra1ny, вы имеете в виду что в CreateFileMap передавать не максимальный размер файла, а какую-то его часть и если понадобится записать больше, то снова вызвать CreateFileMap, но только указать больший размер?
Точно, можно же WriteFile дописывать. Спасибо. Это сообщение отредактировал(а) roko - 8.1.2010, 00:00 |
|||
|
||||
| bra1ny |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 26.12.2008 Репутация: 2 Всего: 3 |
я не много не пойму чего Вы делаете , обьясните "на кошках" =)
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России. |
|||
|
||||
| roko |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 2.3.2008 Репутация: нет Всего: нет |
Например так. Есть файл 10Гб. Мне надо создать второй файл в ктором будут только все символы из первого кроме пробелов. Получается что точный размер второго файла наперед узнать нельзя.
|
|||
|
||||
| bra1ny |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 26.12.2008 Репутация: 2 Всего: 3 |
вы 10 гигов сразу не промапите В АП процесса. Будете частями мапить. У Рихтера есть пример , как с такими большими файлами работать.
Добавлено через 6 минут и 59 секунд Так что : 1 мапите кусочек 2 парсите его. 3 записываете что надо 4 анмапите старый кусок 5 идете в пункт 1. --------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России. |
|||
|
||||
| roko |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 2.3.2008 Репутация: нет Всего: нет |
Вот цитата из Рихтера : Для дозаписи данных в файл выбирайте его размер максимальным, чтобы оста вить пространство «для маневра»
Поэтому если пространство «для маневра» будет большим, а висходном файле будут почти все пробелы то второй файл получется маленький и использовать большое пространство для маневра будет не рационально. я делаю эти пять пунктов если мне известен точный размер файла. Разве можно применять ети 5 пунктов если размер файла наперед неизвестен? Это сообщение отредактировал(а) roko - 8.1.2010, 00:39 |
|||
|
||||
| bra1ny |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 26.12.2008 Репутация: 2 Всего: 3 |
м я вас не пойму , зачем вам знать размер выходного файла. Если вы его будете по кускам составлять?)
Пример из того же Рихтера :
Это сообщение отредактировал(а) bra1ny - 8.1.2010, 00:47 --------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России. |
|||
|
||||
| roko |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 2.3.2008 Репутация: нет Всего: нет |
Дело втом, что в этом примере он читает файл и поэтому передает в CreateFileMapping значения dwMaximumSizeHigh и dwMaximumSizeLow равными нулю и, так как файл уже существует и его размер !=0, то система сама определяет размер фала. А если бы надо было создать новый файл или длина файла равнялась бы нулю то передавать нули в CreateFileMapping нельзя так как она вернет NULL.
Это сообщение отредактировал(а) roko - 8.1.2010, 01:01 |
|||
|
||||
| bra1ny |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 26.12.2008 Репутация: 2 Всего: 3 |
А вам что-то мешает создать второй файл и тупо через WriteFile записывать отпарсенный кусок? И в итоге получить свой второй файл без пробелов?
Это сообщение отредактировал(а) bra1ny - 8.1.2010, 01:05 --------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России. |
|||
|
||||
| roko |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 2.3.2008 Репутация: нет Всего: нет |
ничего, после того как вы написали
я решил делать через WriteFile. Просто думал еще как-то можно. |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |