12

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

现在,我已经尝试了我所知道的关于在 delphi 中重命名文件的所有方法。

  • 重命名文件(文件 1,文件 2)
  • 移动文件(文件 1,文件 2)
  • ETC...

我试过获取 Windows 短路径ExtractShortPathName,但这只是返回一个空字符串。(调用命令提示符:“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 编码。

所以我的问题是:有谁知道允许我重命名无效目录的函数?

4

1 回答 1

16

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

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

代替

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

可以在 MSDN 上的“命名文件、路径和命名空间”主题下找到有关它的更多信息。请注意,它特别建议不要在文件名中放置尾随点。

于 2012-06-26T03:54:31.923 回答