Delphi:重命名无效文件夹

Cgd*_*mic 12 delphi directory file-rename

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

现在,我已经尝试了所有关于在delphi中重命名文件的知识.

  • RenameFile(文件1,文件2)
  • MoveFile(文件1,文件2)
  • 等等...

我试过让Windows短路径,ExtractShortPathName但这只是返回一个空字符串.(调用commandPrompt:"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);
Run Code Online (Sandbox Code Playgroud)

我知道shellExecute不是这里使用的最佳方法.我只是想让臭味发挥作用.我将担心以后优化和正确的Delphi编码.

所以我的问题是:有没有人知道一个允许我重命名无效目录的功能?

mgh*_*hie 16

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

MoveFile('\\?\D:\invalid_dir.', '\\?\D:\invalid_dir.fixed');
Run Code Online (Sandbox Code Playgroud)

代替

MoveFile('D:\invalid_dir.', 'D:\invalid_dir.fixed');
Run Code Online (Sandbox Code Playgroud)

有关它的更多信息,请参阅MSDN下的"命名文件,路径和命名空间"主题.请注意,它特别建议不要在文件名中放置尾随点.