Reputation: 127
I have an application that creates invalid Directories...
e.g. c:\Program Files\somedirectory.
- the period is a part of the directory name.
Now, I have tried everything that I know about renaming a file in delphi.
I have tried getting the windows short path ExtractShortPathName
but this just returns an empty string.
(to call in commandPrompt: "RENAME ShortOldName NewName")
Now I know I can manually do it in cmd but I am not about to spend the time to go through all my files and do it ;)
Here is a bit of my code:
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);
I know shellExecute is not the best method to be using here. I am just trying to get the stinker to work. I will worry about optimizing and proper Delphi coding later.
So my question is: Does anyone know of a function that will allow me to rename an invalid directory?
Upvotes: 12
Views: 2323
Reputation: 32344
You can use the standard Windows API function MoveFile() if you pass the name of the folder in a special way:
MoveFile('\\?\D:\invalid_dir.', '\\?\D:\invalid_dir.fixed');
instead of
MoveFile('D:\invalid_dir.', 'D:\invalid_dir.fixed');
More about it can be found on MSDN under the "Naming Files, Paths, and Namespaces" topic. Note that it specifically advises against putting trailing dots in file names.
Upvotes: 17