1

有谁知道用于重命名文件并仅更改其大小写的纯 Win32 解决方案,它不涉及中间重命名为不同的名称或特殊权限(例如备份、恢复)。

由于 Win32 子系统通常将两个仅大小写不同的文件名视为相同,因此我无法找到任何解决该问题的方法。

4

4 回答 4

5

我用MoveFileAPI 制作的测试程序似乎可以工作。renamecmd.exe中的命令也是如此。你试过什么,你得到了什么错误?

这无关紧要,但进一步的测试表明,以这种方式重命名长文件名是可行的,但会顺便更改短文件名(例如在~1和之间交替)。~2

于 2011-04-28T13:39:47.427 回答
2

只需使用普通的MoveFile API。该调用可能只是变成 ZwSetInformationFile(..., FileRenameInformation,...) FILE_RENAME_INFORMATION的文档声明您需要 DELETE 访问权限并且文件不能被锁定等,但这些限制可能也适用于其他解决方案。

于 2011-04-28T13:54:07.377 回答
0

我不相信有一种方法可以将两个名称相同的文件公开给 Win32 子系统,而这两个文件仅在拼写上有所不同。即使您能够以某种方式创建这些文件,最可能的结果是只有一个文件可以访问 - 违背了在 Win32 中保持唯一的目的。

如果你想进入 Native 层,你可以使用 NtCreateFile 和 InitializeObjectAttributes 创建一个没有 OBJ_CASE_INSENSITIVE 的文件,或者你可以用额外的空格填充结尾(如果你用额外的空格填充,文件将无法从 Win32 dos 路径访问)。见这里:http ://www.osronline.com/ddkx/kmarch/k109_66uq.htm 。我很确定你已经知道了,但我把它包括在内,以防你不知道。

于 2011-04-28T23:13:12.133 回答
0

只要其他程序不立即需要您的文件,您就可以使用我的解决方案。

重命名文件时,大写,然后删除最后一个字母。然后再次重命名并返回这封信。

:)

于 2011-09-02T15:57:25.217 回答