有谁知道用于重命名文件并仅更改其大小写的纯 Win32 解决方案,它不涉及中间重命名为不同的名称或特殊权限(例如备份、恢复)。
由于 Win32 子系统通常将两个仅大小写不同的文件名视为相同,因此我无法找到任何解决该问题的方法。
有谁知道用于重命名文件并仅更改其大小写的纯 Win32 解决方案,它不涉及中间重命名为不同的名称或特殊权限(例如备份、恢复)。
由于 Win32 子系统通常将两个仅大小写不同的文件名视为相同,因此我无法找到任何解决该问题的方法。
我用MoveFile
API 制作的测试程序似乎可以工作。rename
cmd.exe中的命令也是如此。你试过什么,你得到了什么错误?
这无关紧要,但进一步的测试表明,以这种方式重命名长文件名是可行的,但会顺便更改短文件名(例如在~1
和之间交替)。~2
只需使用普通的MoveFile API。该调用可能只是变成 ZwSetInformationFile(..., FileRenameInformation,...) FILE_RENAME_INFORMATION的文档声明您需要 DELETE 访问权限并且文件不能被锁定等,但这些限制可能也适用于其他解决方案。
我不相信有一种方法可以将两个名称相同的文件公开给 Win32 子系统,而这两个文件仅在拼写上有所不同。即使您能够以某种方式创建这些文件,最可能的结果是只有一个文件可以访问 - 违背了在 Win32 中保持唯一的目的。
如果你想进入 Native 层,你可以使用 NtCreateFile 和 InitializeObjectAttributes 创建一个没有 OBJ_CASE_INSENSITIVE 的文件,或者你可以用额外的空格填充结尾(如果你用额外的空格填充,文件将无法从 Win32 dos 路径访问)。见这里:http ://www.osronline.com/ddkx/kmarch/k109_66uq.htm 。我很确定你已经知道了,但我把它包括在内,以防你不知道。
只要其他程序不立即需要您的文件,您就可以使用我的解决方案。
重命名文件时,大写,然后删除最后一个字母。然后再次重命名并返回这封信。
:)