-
> [39] MultIfleX (27.01.12 09:43) > Если я ее форматнул, и следом записал два/три больших файла > скажем по пол гигабайта, как мне узнать, непрерывно ли они > расположены? Я не говорю про контроллер, я говорю про Win.
Вообще-то должны бы последовательно лечь, но какое там у Вин расположение звёзд в тот момент будет неизвестно. Так что я бы не полагался на её настроение. Проверить чтением таблиц(ы) FAT, может какой другой способ, утилита есть.
Всё имхо.
Ещё момент. У пользователя могут быть установлены какие-нибудь дефрагментаторы диска, которые могут сами или с его согласия начать оптимизировать флешку. Например Perfect Disk с настройками по умолчанию может так делать. Так что после вставки флешки в комп файл уже может оказаться НЕпоследовательно расположен.
Но если НЕ на контроллере гарантированно последовательный создавать, то на контроллере читать FAT и по нему уже совсем правильно записывать в цепочки кластеров файла, не закладываясь на его последовательое расположение. Что тоже не потребует каких-то сверресурсов.
-
> Что тоже не потребует каких-то сверресурсов.
Уже проверил, при максимальной расчетной нагрузке не успевает позиционироваться. Все в притык)
Про дефрагментаторы - я бы посоветовал удалить дефрагментатор, дефрагменирующий непрерывный файл ;)
-
> [41] MultIfleX (27.01.12 11:23) > Про дефрагментаторы - я бы посоветовал удалить дефрагментатор, > дефрагменирующий непрерывный файл ;)
Он его может начать перемещать, чтобы освободить кусок место под другие - обычное дело - а пользователь его остановит в средине процесса. И потом посоветовать ещё не значит, что такого не будет.
-
непрерывный файл вполне может оказаться фрагментированным после дефрагментации, если на разделе мало свободного места.
-
> [41] MultIfleX (27.01.12 11:23) > Уже проверил, при максимальной расчетной нагрузке не успевает > позиционироваться. Все в притык)
Странно это. По памяти ресурсов больше надо на размер сектора 512 байт вроде если не читать с запасом, по скорости ну чтение сектора из FAT иногда добавится, в самом худшем случае на запись каждого кластера, сколь он там 8192 допустим байта, одно чтение 512 байт. Это при последовательной записи.
-
я делал так: устройство при подключении флешки проверяет, "наша" или "не наша" (см.ниже). если не наша - тут же форматирует ее. Способ предельно простой (тут сверху уже подсказывали): один раздел, один том, один файл размером на весь свободный объем, фиксированная метка диска и тома. Файловая система только FAT16. Соответственно, обращение к флешке предельно упрощается + можно читать содержимое файла средствами ОС.
-
посмотрел Petit FAT FATFS fs; FRESULT res; DWORD sect;
res=pf_mount(&fs);
res=pf_open("/Data.txt");
res=pf_lseek (0);
sect=fs->dsect;
далее выбрасываем Petit FAT и работаем напрямую используя инфу из fs т.е. sect из последней строчки как расположить файл последовательно уже другая легко решаемая задача
-
> По памяти ресурсов больше надо на размер сектора 512 байт вроде ...
да, но когда у тебя 8 битный контроллер с 4 кб ОЗУ, дающий в лучшем случае 16MIPS ... не разгуляешься. Менять на более мощный и дорогой не вижу смысла - с основными задачами справляется.
> устройство при подключении флешки проверяет, "наша" или "не наша"
если не наша - девайс не должен работать, ибо опорных данных на флеше нет. Уже реализовал такого же смысла проверку =). Форматировать и записывать начальные данные буду на ПК. Проверить данные после записи на последовательность я могу. Обнаружение начального сектора файла и чтение/запись на девайсе со смещением уже отладил.
Всем спасибо большое за помощь.
-
> далее выбрасываем Petit FAT и работаем напрямую используя > инфу из fs т.е. sect из последней строчки
да, все так и сделал ;)
-
> А мне не приходит, вот жеж.....
буквально седня утром внедрил себе в софт данную плюшку ибо актуально :)
-
> буквально седня утром внедрил себе в софт данную плюшку > ибо актуально :)
И как отслеживаешь вставку флеша в ридер?
-
> MultIfleX (27.01.12 16:26) [50]
через WM_DEVICECHANGE :P
-
кстати, в гугле решения для этого случая не найдеш
-
так показывай код!
-
> через WM_DEVICECHANGE :P
Как обычно, осмысленный, несущий свет и просвещение пост...
Однако, пока вы плюшками баловались, нашел вариант - SHChangeNotifyRegister ;) Все, разрешите откланяться. Вопросов более нет.
|