我有一个创建无效目录的应用程序...
例如c:\Program Files\somedirectory.
- 句点是目录名称的一部分。
现在,我已经尝试了所有关于在delphi中重命名文件的知识。
我尝试过获取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);
我知道shellExecute不是这里使用的最佳方法。 我只是想让臭味发挥作用。我稍后会担心优化和正确的Delphi编码。
所以我的问题是:有没有人知道一个允许我重命名无效目录的函数?
答案 0 :(得分:16)
如果您以特殊方式传递文件夹的名称,则可以使用标准Windows API函数MoveFile():
MoveFile('\\?\D:\invalid_dir.', '\\?\D:\invalid_dir.fixed');
而不是
MoveFile('D:\invalid_dir.', 'D:\invalid_dir.fixed');
有关它的更多信息,请参阅"Naming Files, Paths, and Namespaces"主题下的MSDN。请注意,它特别建议不要在文件名中放置尾随点。