ディレクトリ名を変更するには?

解決


まる  2005-07-15 11:22:05  No: 16386

はじめまして、まるといいます。
Delphi歴3ヶ月です。まだまだですが、よろしくお願いします。

さっそくですが、質問させてください。
ディレクトリ名を変更したく、
下記URLより「SHFileOperationコンポーネント」を使用しました。
(URL:http://homepage3.nifty.com/m-and-i/tips/tipspage.htm
しかし、旧ディレクトリ以下のディレクトリをエクスプローラで開いていると、
リネーム処理が失敗します。これを回避する方法はあるのでしょうか?

ネット上で、ディレクトリ名の変更方法を調べてみましたが、
これといった解決方法が見つけられず、困っています。
どうぞ、よろしくお願いします。

ソース例:
  //BeforeFolderPath: Strging・・・旧ディレクトリ
  //          (変更ディレクトリ名を含む、ドライブ文字からの絶対パス)
  ShfOperation.FromFFList.Add(BeforeFolderPath);
  //AfterFolderPath : Strging・・・新ディレクトリ
  //          (変更ディレクトリ名を含む、ドライブ文字からの絶対パス)
  ShfOperation.ToFolder := AfterFolderPath;
  ShfOperation.Execute;

  ※事前に、以下オプションをtrue設定
    FOF_ALLOWUNDO                 可能なら元の情報を維持する.
    FOF_NOCONFIRMATION            すべての確認メッセージを表示しないようにする。
    FOF_SILENT                    進行状況を示すダイアログボックスを表示させないで、
                                  この関数を使う場合、このフラグを設定

環境:
WindowsXP HOME SP2
Delphi6 Personal


対案  2005-07-15 18:47:39  No: 16387

MoveFile関数を使ったら?


まる  2005-07-16 03:56:54  No: 16388

ありがとうございます。

結果、「MoveFile関数」を使いませんでしたが、
「移動」ということで、
リネーム「ShfOperation.OperationF.foRENAME」 にしていたところを、
移動「ShfOperation.OperationF.foMOVE」 にしてうまくいきました。
また、変更前ディレクトリを設定する前に「ShfOperation.FromFFList.Clear」を行っていなかったため、
連続して処理した場合に失敗することも、ひとつの要因でした。

ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加