将Win32中的文件重命名为name,只有大小写的差异

时间:2011-04-28 13:31:16

标签: winapi file-rename

有没有人知道用于重命名文件的纯Win32解决方案,只更改其大小写,不涉及中间重命名为其他名称或特殊权限(例如备份,还原)。

由于Win32子系统通常认为两个文件名的大小写只相同,所以我无法找到解决问题的方法。

4 个答案:

答案 0 :(得分:5)

我使用MoveFile API制作的测试程序似乎有效。 cmd.exe中的rename命令也是如此。你尝试了什么,你得到了什么错误?

这是不相关的,但进一步的测试显示以这种方式重命名长文件名有效但会改变短文件名(例如,在~1~2之间交替),顺便说一句。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

我不相信有一种方法可以公开两个具有相同名称的文件,这些文件仅在拼写上与Win32子系统不同。即使你能够创建这些文件,最有可能的结果是只能访问一个文件 - 这样就无法在Win32中保持这样的目的。

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

答案 3 :(得分:0)

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

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

:)