3

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

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

我知道波浪号字符用于制作旧版 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 也匹配。波浪号之后的所有内容都被忽略了吗?这是功能还是错误?

我正在 Windows 7 Professional 64 版上进行测试,如果这有什么改变的话。

4

2 回答 2

4

FindFirstFile还包括出于遗留原因的短名称,因此该模式*.txt将包括以 include8.3结尾的表示形式的任何*.txt内容*.txtANYTHING,而不仅仅是~字符(请参阅dir /x匹配的内容)。

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

于 2014-01-22T13:26:11.663 回答
0

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

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

于 2014-01-22T13:34:51.993 回答