| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > WriteFile |
| Автор: MaXL 29.8.2007, 18:57 | ||||
| Вот тут такая проблема: моя программа открывает файл для чтения, проецирует его в файл, закрывает файл. Вот код:
Затем программа сохраняет этот "проецируемый в память" файл на диск. Вот таким кодом:
Так вот, вроде бы всё нормально, должно работать. Но если я пытаюсь сохранить в тот же файл(который и открывал), то CreateFile возвращает ошибку(использовав GetLastError и FormatMessage узнал): "Запрошенную операцию нельзя выполнить для файлы с открытой сопоставленной секцией". Ну а если я сохраняю под любым другим именем, то всё отлично сохраняется. Так вот у меня есть догадка, что просто навсего так и должно быть, т.е. если мы файл отобразили в памяти, то пока он там будет, его нельзя второй раз открывать/удалять. Но может быть и нет. Кто скажет в чём проблема ? |
| Автор: NiJazz 29.8.2007, 19:27 | ||
Это как понять? Пытаешься писать туда данные? Когда файл проецируется в память, то с помощью MapViewOfFile можно получить указатель на данные файла, работая с ним как с блоком памяти. Чтобы изменения сохранились, нужно вызвать UnmapViewOfFile. WriteFile использовать не нужно! |
| Автор: MaXL 29.8.2007, 19:39 |
| NiJazz, т.е. чтобы не сохранить сделанные изменения в тот же файл, то нужно вызвать UnmapViewOfFile ? а что сохранить просто в файл, использовать вышеприведённый метод(с CreateFile) ? ============================== Всё работает. NiJazz спасибо. Сделал так: проверяю, если имя файла, такое же и при открытии, ты вызываю UnmapViewOfFile, а потом опять загружаю тот же файл в память; а если имя файла дургое, то использую метод с WriteFile. |