Конференция "WinAPI" » Disk raw r&w
 
  • Inovet © (27.01.12 10:08) [40]
    > [39] MultIfleX   (27.01.12 09:43)
    > Если я ее форматнул, и следом записал два/три больших файла
    > скажем по пол гигабайта, как мне узнать, непрерывно ли они
    > расположены? Я не говорю про контроллер, я говорю про Win.

    Вообще-то должны бы последовательно лечь, но какое там у Вин расположение звёзд в тот момент будет неизвестно. Так что я бы не полагался на её настроение. Проверить чтением таблиц(ы) FAT, может какой другой способ, утилита есть.

    Всё имхо.

    Ещё момент. У пользователя могут быть установлены какие-нибудь дефрагментаторы диска, которые могут сами или с его согласия начать оптимизировать флешку. Например Perfect Disk с настройками по умолчанию может так делать. Так что после вставки флешки в комп файл уже может оказаться НЕпоследовательно расположен.

    Но если НЕ на контроллере гарантированно последовательный создавать, то на контроллере читать FAT и по нему уже совсем правильно записывать в цепочки кластеров файла, не закладываясь на его последовательое расположение. Что тоже не потребует каких-то сверресурсов.
  • MultIfleX (27.01.12 11:23) [41]

    > Что тоже не потребует каких-то сверресурсов.

    Уже проверил, при максимальной расчетной нагрузке не успевает позиционироваться. Все в притык)

    Про дефрагментаторы - я бы посоветовал удалить дефрагментатор, дефрагменирующий непрерывный файл ;)
  • Inovet © (27.01.12 12:11) [42]
    > [41] MultIfleX   (27.01.12 11:23)
    > Про дефрагментаторы - я бы посоветовал удалить дефрагментатор,
    > дефрагменирующий непрерывный файл ;)

    Он его может начать перемещать, чтобы освободить кусок место под другие - обычное дело - а пользователь его остановит в средине процесса. И потом посоветовать ещё не значит, что такого не будет.
  • RWolf © (27.01.12 12:11) [43]
    непрерывный файл вполне может оказаться фрагментированным после дефрагментации, если на разделе мало свободного места.
  • Inovet © (27.01.12 12:18) [44]
    > [41] MultIfleX   (27.01.12 11:23)
    > Уже проверил, при максимальной расчетной нагрузке не успевает
    > позиционироваться. Все в притык)

    Странно это. По памяти ресурсов больше надо на размер сектора 512 байт вроде если не читать с запасом, по скорости ну чтение сектора из FAT иногда добавится, в самом худшем случае на запись каждого кластера, сколь он там 8192 допустим байта, одно чтение 512 байт. Это при последовательной записи.
  • miek (27.01.12 13:16) [45]
    я делал так: устройство при подключении флешки проверяет, "наша" или "не наша" (см.ниже). если не наша - тут же форматирует ее. Способ предельно простой (тут сверху уже подсказывали): один раздел, один том, один файл размером на весь свободный объем, фиксированная метка диска и тома. Файловая система только FAT16. Соответственно, обращение к флешке предельно упрощается + можно читать содержимое файла средствами ОС.
  • Slym © (27.01.12 13:52) [46]
    посмотрел Petit FAT
    FATFS fs;   //FatFs объект
    FRESULT res;   //Результат выполнения
    DWORD sect;
    res=pf_mount(&fs);
    res=pf_open("/Data.txt");
    res=pf_lseek (0);
    sect=fs->dsect;


    далее выбрасываем Petit FAT и работаем напрямую используя инфу из fs т.е. sect из последней строчки

    как расположить файл последовательно уже другая легко решаемая задача
  • MultIfleX (27.01.12 14:04) [47]

    > По памяти ресурсов больше надо на размер сектора 512 байт вроде ...

    да, но когда у тебя 8 битный контроллер с 4 кб ОЗУ, дающий в лучшем случае 16MIPS ... не разгуляешься. Менять на более мощный и дорогой не вижу смысла - с основными задачами справляется.


    > устройство при подключении флешки проверяет, "наша" или "не наша"

    если не наша - девайс не должен работать, ибо опорных данных на флеше нет. Уже реализовал такого же смысла проверку =). Форматировать и записывать начальные данные буду на ПК. Проверить данные после записи на последовательность я могу. Обнаружение начального сектора файла и чтение/запись на девайсе со смещением уже отладил.

    Всем спасибо большое за помощь.
  • MultIfleX (27.01.12 14:05) [48]

    > далее выбрасываем Petit FAT и работаем напрямую используя
    > инфу из fs т.е. sect из последней строчки

    да, все так и сделал ;)
  • QAZ (27.01.12 14:57) [49]

    > А мне не приходит, вот жеж.....

    буквально седня утром внедрил себе в софт данную плюшку ибо актуально :)
  • MultIfleX (27.01.12 16:26) [50]

    > буквально седня утром внедрил себе в софт данную плюшку
    > ибо актуально :)

    И как отслеживаешь вставку флеша в ридер?
  • QAZ (27.01.12 17:36) [51]

    > MultIfleX   (27.01.12 16:26) [50]

    через WM_DEVICECHANGE :P
  • QAZ (27.01.12 17:41) [52]
    кстати, в гугле решения для этого случая не найдеш
  • brother © (27.01.12 21:13) [53]
    так показывай код!
  • MultIfleX (29.01.12 17:45) [54]

    > через WM_DEVICECHANGE :P

    Как обычно, осмысленный, несущий свет и просвещение пост...

    Однако, пока вы плюшками баловались, нашел вариант - SHChangeNotifyRegister ;) Все, разрешите откланяться. Вопросов более нет.
 
Конференция "WinAPI" » Disk raw r&w
Есть новые Нет новых   [134430   +4][b:0][p:0.001]