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

解決


まる  2005-07-15 11:22:05  No: 16386  IP: [192.*.*.*]

はじめまして、まるといいます。
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  IP: [192.*.*.*]

MoveFile関数を使ったら?

編集    削除
まる  2005-07-16 03:56:54  No: 16388  IP: [192.*.*.*]

ありがとうございます。

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

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

編集    削除