NTFS

Drive subsystem, filesystem drivers
  • Трудно сказать, в NTFS очень много нагорожено. Если считать все мелочи, то не поддерживается сейчас больше, чем поддерживается.
  • Pathoswithin
    Можешь сделать поддержку длинного тире "—" и украинских букв?

    Вот сейчас записал фильм "Ричард Фейнман- Характер физического закона. Лекция #1. Пример физического закона — закон тяготения.mp4" и не могу его посмотреть :(
    Из хаоса в космос
  • А при чём здесь NTFS? Уже давно сделал — сисфункция 80.
    Если кто сравнивает с виндой, то там ср1251, а у нас ср866.
  • Leency wrote:поддержку длинного тире "—" и украинских букв
    Что-то подобное уже обсуждалось http://board.kolibrios.org/viewtopic.ph ... =15#p67402
    Там предлагались некоторые варианты.
    Pathoswithin wrote:Если кто сравнивает с виндой
    В винде FindFirstFile и FindNextFile работают со структурой TWIN32FINDDATA, в которой есть cAlternateFileName.
    Для имени "Димна Суміш - О Боже Мій" имя в формате 8.3 будет "ДИМНАС~1", а если вывести имя в консоль, то вывод будет такой "Димна Сум_ш - О Боже М_й".
    Файл остаётся доступен по имени "ДИМНАС~1".
    Просто сравнил.
  • Если кто продолжает сравнивать с виндой, то у нас ещё есть драйвер файловой системы ext, которая вообще не хранит имя в формате 8.3
    К тому же в нашей структуре изначально нет ничего вроде cAlternateFileName...
  • Возможное решение - утилита, которая использует сисфункцию 80 и переименовывает по каким то правилам или в заданное неюникодное имя.

    Проблема только в отсутствии подфункции переименования - придется копировать (
  • http://board.kolibrios.org/viewtopic.php?f=1&t=3545
    Только NTFS пока не поддерживает.
  • Почему в функции 80 кодировка +20, а путь +24.
    Почему не наоборот? Тогда можно было бы иметь одну структуру под обе функции 70 и 80.
    Из хаоса в космос
  • Разбираюсь с функцией 80. Я указал кодировку для чтения папки и для вывода строки. Почему не работает?
    Attachments
    kolibri.zip (1.29 MiB)
    Downloaded 130 times
    Из хаоса в космос
  • Leency wrote:Разбираюсь с функцией 80. Я указал кодировку для чтения папки и для вывода строки. Почему не работает?
    Разобрался. Я потратил около 3-4 часов.

    Не работало по двум причинам:
    1. Размер структуры BDVK для файла в CPP 304 байта, а в UTF 520. Моя ошибка.
    2. Для функции чтения папки 80 кодировку нужно указывать в двух местах О_о Верхняя видимо на получение данных, а нижняя на строку пути. Документация ещё на функцию 80 такова, что е тупо нет - это ссылка на ф70 в обих чертах, но в чём различие не очевидно.
    Attachments
    Screenshot_1.png
    Screenshot_1.png (150.97 KiB)
    Viewed 10800 times
    Из хаоса в космос
  • Как здесь уже писали выше, файлы со спецсимволами в названии доступны, когда у них есть имя в ms-dos формате 8.3
    Image
    Сложность в том, как узнать эти 8.3 имена. Пока что алгоритм такой:
    1. В Windows XP через Volkov Commander посмотреть имена нужных файлов.
    2. Записать соответствие вручную в текстовый файл, как на скриншоте. Имя папки я сделал без спецсимволов, иначе некоторые даже виндовые программы не откроют.
    3. Осталось как-то открыть файл. OpenDialog не позволяет ввести имя файла, но через команду "Запуск программы" Win+R это можно сделать.

    Хорошо бы иметь какой-нибудь способ посмотреть 8.3 имена прямо в Колибри. Может быть, он уже есть, а я туплю и не нашёл?

    И ещё: файлы, созданные в Колибри, не видны в Volkov Commander (только при удалении папки предупреждение, что она не пуста). Похоже, из-за отсутствия этих самых 8.3 имён. Сложно ли это исправить? При установке винды я всегда обнуляю NtfsDisable8dot3NameCreation.
  • Найдена проблема в работе драйвера. При использовании сисфункции 70.3, которая должна заменять часть файла, часть файла по смещению выше чем записываемый блок удаляется. Тестирование производил на ноутбуке, где основная ос виндовс 10.
    На скриншоте файл открыт в HEX редакторе до и после выполнения замены.
    Spoiler:
    SCR_bug_ntfs_70.3.PNG
    SCR_bug_ntfs_70.3.PNG (68.07 KiB)
    Viewed 7051 times
  • Просмотрел код. Да, похоже функция всегда устанавливает размер файла в каталоге, а должна только увеличивать. Так тестировали, что заметили только сейчас. Видимо непопулярный расклад. Только я уже много лет не занимался программированием, сам не исправлю...

    Если что, там всего-то нужно сделать сравнение перед строкой 3481 в ntfs.inc, это должно исправить ошибку для файлов более 1 Кб, но вот на счёт файлов менее 500 байт возможно кое-что ещё...
  • Если точнее, нужно вставить вместо строк 3481 и 3482 что-то вроде этого:

    Code: Select all

    	cmp	edx, [edi+fileRealSize+4]
    	jc	@f
    	jnz	.resize
    	cmp	[edi+fileRealSize], eax
    	jnc	@f
    .resize:
    	mov	[edi+fileRealSize], eax
    	mov	[edi+fileRealSize+4], edx
    @@:
    
    ... и протестировать крупные и мелкие файлы.
  • Who is online

    Users browsing this forum: No registered users and 3 guests