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?
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With