12

無効なディレクトリを作成するアプリケーションがあります...例c:\Program Files\somedirectory. -ピリオドはディレクトリ名の一部です。

今、私はデルファイでファイルの名前を変更することについて知っているすべてを試しました。

  • RenameFile(file1、file2)
  • MoveFile(File1、File2)
  • 等...

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コーディングについて心配します。

だから私の質問は:誰かが私が無効なディレクトリの名前を変更できるようにする関数を知っていますか?

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 に答える