2014-01-22 4 views
3

У меня есть шаблон для поиска. Скажите «* .txt».Что означает тильда в шаблоне файлов Windows

Теперь у меня есть файлы, которые я не хочу перечислять там. Я считаю, что они не соответствуют этой схеме. Но на окнах они делают.

Я знаю, что символ тильды используется для краткой формы устаревшего файла 8.3. Это LongFilename.json может быть LONGFI ~ 1.JSO. Но я не знал, что они каким-то образом обрабатываются в окнах в шаблонах поиска файлов. Они есть. Я не могу найти документацию о том, что они означают и как сопоставить файлы по-моему.

Моя проблема НЕ с короткими формами. Или я думаю, что это напрямую не связано с этим.

У меня есть файл «A.txt». Теперь я хотел временный файл и использовал «A.txt ~». Это файлы резервных копий unix, которые обычно не видны. Но на окнах они не должны иметь особого значения сами по себе. Только для моей заявки.

Теперь я хочу, чтобы список файлов * .txt. Команда dir * .txt возвращает к моему удивлению также все файлы .txt ~ в том же каталоге. И я не хочу их. Я использую FindFileFirst из Win32 API. Я не нашел ничего о тильде в документации. FindFileFirst (« .txt», handle) возвращает также файлы «A.txt ~». Могу ли я использовать некоторый флаг, чтобы их исключить? Я знаю, что могу сделать особое условие, например, для «.». а также "..". Как работает оператор? A.txt ~ 1 также сопоставляется. Все ли после исчезновения тильды? Это функция или ошибка?

Я тестирую это на Windows 7 Professional, 64 edition, если это что-то меняет.

+0

Я тоже что-то видел. В моем случае это было не с тильдой. Чтобы использовать ваш пример, я искал «* .txt», но он соответствовал, как будто я сказал «* .txt *». Переименуйте свой файл, чтобы расширение было «.txt1» и посмотрело, все ли оно соответствует. Это может быть не о тильде, а о том, как эта функция выполняет матч. – Darren

+0

О! Вы правы, конечно. Я даже не подумал, что так может быть. Кажется, я не могу сопоставить файл, заканчивающийся чем-то, потому что в конце есть неявный *. A.txt1 действительно соответствует dir * .txt :-( – Pihhan

ответ

4

FindFirstFile также включает в себя короткие имена для старых причин, так что шаблон *.txt будет включать в себя что-нибудь с 8.3 представления заканчивающегося в *.txt, который включает в себя *.txtANYTHING, а не только ~ характера (см dir /x для того, что быть сопоставлено с).

Вам нужно будет фильтровать в вашем перечислении FindNext.

+0

Да, похоже, это применимо только к суффиксу длины 3. * .html не соответствует * .html1. Но * .htm действительно соответствует * .html и *. html1. Странные побочные эффекты обработки устаревших файлов. – Pihhan

0

Если вы ищете .txt-файлы, например, вы можете использовать опцию «kind: text» в Windows, чтобы исключить файлы txt ~ и подобных файлов, поскольку они больше не являются распознанным типом.

Это то, что работает при обычном поиске окон. Я не уверен на 100% об API, но он также должен быть там.

+0

Проблема в том, что я использую старый Win32 в приложении, где я нашел проблемы с этим. Где бы я ввел «kind: text»? Я не хочу использовать File Explorer. – Pihhan

+0

Это больше как SQL-подход. Эта страница может помочь. Я не специалист по этой теме, но это стоит того, что я думаю. http://msdn.microsoft.com/en-us/library/windows/desktop/ bb266512% 28v = vs.85% 29.aspx –

Смежные вопросы