Что означает тильда в шаблоне файла Windows
У меня есть шаблон для поиска. Скажите "*.txt".
Теперь у меня есть некоторые файлы, которые я не хочу перечислять там. Я считаю, что они не соответствуют этой модели. Но на окнах они делают.
Я знаю, что символ тильда используется для краткой формы устаревшего имени файла 8.3. То есть LongFilename.json может быть LONGFI~1.JSO. Но я не знал, что они обрабатываются как-то на окнах в шаблонах поиска файлов. Они есть. Я не могу найти какую-либо документацию о том, что они значат и как сопоставить файлы по-моему.
Моя проблема не с короткими формами. Или я думаю, что это не имеет прямого отношения к этому.
У меня есть файл "A.txt". Теперь я хотел временный файл и использовал "A.txt~". Это файлы резервных копий Unix, которые обычно не видны. Но на окнах они не должны иметь особого значения сами по себе. Только для моего приложения.
Теперь я хочу список файлов "*.txt". Команда dir *.txt возвращает к моему удивлению также все .txt ~ файлы в одной директории. И я не хочу их. Я использую FindFileFirst из Win32 API. Я не нашел ничего о тильде в документации. FindFileFirst (".txt", дескриптор) возвращает также файлы "A.txt~". Могу ли я использовать какой-нибудь флаг, чтобы исключить их? Я знаю, что могу сделать специальное условие, как у меня для "." а также "..". Как работает оператор? A.txt~1 также соответствует. Все ли после тильды игнорируется? Это особенность или ошибка?
Я тестирую это на Windows 7 Professional, 64-е издание, если что-то изменится.
2 ответа
FindFirstFile
также включает короткие имена по старым причинам, поэтому шаблон *.txt
будет включать что-нибудь с 8.3
представление заканчивается *.txt
который включает в себя *.txtANYTHING
не только ~
характер (см. dir /x
за то, что сопоставляется с).
Вам нужно будет отфильтровать в вашем перечислении FindNext.
Например, если вы ищете файлы.txt, вы можете использовать опцию "kind:text" в Windows, чтобы исключить txt~ и подобные файлы, поскольку они больше не являются распознанным типом.
Это то, что работает при обычном поиске Windows. Я не уверен на 100% об API, но он также должен быть там.