Delphi: 重命名一个无效的文件夹

12

我有一个程序创建了无效的目录... 例如:c:\Program Files\somedirectory. - 句点是目录名称的一部分。

我已经尝试了我所知道的关于用 Delphi 重命名文件的所有方法:

  • RenameFile(file1, file2)
  • MoveFile(File1, File2)
  • 等等...

我尝试使用 ExtractShortPathName 获取 Windows 短路径,但这只返回一个空字符串。 (在命令提示符中调用:“RENAME ShortOldName NewName”)

我知道我可以在 cmd 中手动完成它,但我不想花时间去遍历所有的文件并进行操作 ;)

以下是我的一部分代码:

xshortname := ExtractFileName(ExtractShortPathName(ns + oldName));
  xNewName := newName;

  cmdTxt :=  PWideChar('/C cd ' + ns);
  cmdTxt2 := PWideChar(cmdTxt + '&&' + ' RENAME ' + xshortname + ' ' + #34 + xNewName + #34);
  ShellExecute(0, nil, 'cmd.exe', cmdTxt2, nil, SW_SHOWNORMAL);

我知道shellExecute并不是最好的方法。

我只是想让这个东西能够工作,稍后再考虑优化和正确的Delphi编码。

所以我的问题是:有人知道一个函数可以让我重命名一个无效的目录吗?

1个回答

17

如果您以特殊的方式传递文件夹名称,可以使用标准的Windows API函数MoveFile()

MoveFile('\\?\D:\invalid_dir.', '\\?\D:\invalid_dir.fixed');

取代

MoveFile('D:\invalid_dir.', 'D:\invalid_dir.fixed');

在MSDN上可以找到更多相关信息,具体请参考"命名文件、路径和命名空间"主题。请注意,它明确建议不要在文件名后添加尾部点号。


完美地工作了。谢谢!我到处搜过,我知道 Stack Overflow 绝不会让我失望。 - Cgdynamic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接