halyavin, rabid rabbit И как продвигается?
Теперь по пунктам рассмотрим все обвинения.
Похоже, что путь "../data/my_save.dat" вызовет у файловой системы полуобморочное состояние.
Могу совершенно точно сказать, что будет в текущей реализации 70-й функции. Вернётся (сразу же) значение 5, file not found. Система действительно не поддерживает понятия текущей папки, но
![Exclamation :!:](./images/smilies/icon_exclaim.gif)
добавить такую поддержку не слишком сложно - ориентировочно порядка сотни-двух строчек на всё про всё (фактически нужно всего лишь хранить идентификатор текущей папки, для FAT достаточно 4-байтового кластера + код для SetCurrentDirectory + проверка в начале 70-й функции). Так как, уже надо?
Вообще я тихо офигеваю от того, что приложение должно выделять буфер для работы файловой функции ОС.
70-я функция не нуждается в разворачивании имени в 8+3, а потому и буфер для такого разворачивания не нужен. (В файловой структуре даже поля такого нет).
А чтение файлов фиксированными блоками?
Для 70-й функции нужно указывать смещение и размер
в байтах.
Если мне надо считать из файла 20 байт по заданному адресу в структуру то мне не надо определять номер блока, считывать весь блок в специальный буфер и потом уже копировать необходимые данные. Все заботы по кешированию и буфированию берёт на себя система
Уже.
А если использовать CreateFileMapping/MapViewOfFie то с файлом можно работать так, словно он весь уже загружен в память. Удобно однако
Чего нет, того нет (пока?) А это очень нужно? Ведь фактически всё равно потребуется выделить память и прочитать файл в эту память. Так что никакого выигрыша в производительности не будет.
ситуаций когда одна программа начала считывать файл, прервалась на середине и другая файл переписала
Работу ядра с диском прервать нельзя (если произошло переключение задач и новая задача запросила что-то с диска, то она подождёт, пока не закончит старая программа). Ну а если приложение обращается к ядру порциями, то, как справедливо заметил
halyavin,
Если одна программа начала считывать файл, прервалась на середине, а другая файл переписала, то это проблема пользователя, который одновременно читает и пишет в один и тот же файл из разных программ. Если одна программа заняла файл и ты теперь не имеешь к нему доступа вообще, то это тоже не сладко.
Вообще, для разруливания таких ситуаций придуманы объекты синхронизации, которые с успехом там и используются.