什么意思是在Windows文件模式中代字号

时间:2014-01-22 13:13:48

标签: windows winapi glob tilde-expansion filepattern

我有搜索模式。说“* .txt”。

现在我有一些我不想在那里列出的文件。我相信他们不符合这种模式。 但在Windows上,他们确实如此。

我知道代字符字符用于制作遗留8.3文件名的简短形式。那就是LongFilename.json可能是LONGFI~1.JSO。但我不知道它们是以文件搜索模式在Windows上以某种方式处理的。他们是。我找不到任何关于它们的含义以及如何以我的方式匹配文件的文档。

我的问题不在于简短形式。或者我认为它与它没有直接关系。

我有文件“A.txt”。现在我想要临时文件并使用“A.txt~”。它是通常不可见的unix备份文件。但在Windows上,它们本身不应该有特殊意义。仅适用于我的申请。

现在我想要“* .txt”文件列表。命令         dir * .txt 令我惊讶的是同一目录中的所有 .txt~文件。我不想要他们。我在Win32 API中使用FindFileFirst。我没有在文档中找到关于波浪符号的任何内容。 FindFileFirst(“ .txt”,handle)也返回文件“A.txt~”。我可以使用一些标志来排除它们吗?我知道我可以创造特殊条件,就像我有“。”一样。和“......”。 〜运算符如何工作? A.txt~1也匹配。是否忽略了波浪之后的一切?是那个功能还是bug?

我正在测试Windows 7 Professional,64版,如果它改变了什么。

2 个答案:

答案 0 :(得分:4)

由于遗留原因,

FindFirstFile还包含短名称,因此模式*.txt将包含以8.3结尾的*.txt表示形式的任何内容,其中包含*.txtANYTHING,而非只是~字符(请参阅dir /x了解与之匹配的内容)。

您需要在FindNext枚举中进行过滤。

答案 1 :(得分:0)

如果您正在搜索.txt文件,例如,您可以在Windows中使用“kind:text”选项来排除txt~和类似文件,因为它们不再是可识别的类型。

这适用于常规Windows搜索。我不是100%确定API,但它也应该在那里。