C# を使用して Visual Studio 2010 でこの Windows フォーム アプリケーションを作成しています。
フォームには [実行] ボタンがあり、ユーザーがボタンを押すと、プログラムはいくつかのファイルを生成し、Output
フォルダーに保存します (これは、を使用してプログラムによって作成されますDirectory.CreateDirectory()
) 。
以前の実行からの出力ファイルを保存するアーカイブ フォルダーを作成したいと考えています。
各実行の最初に、既存のOutput
フォルダーをフォルダーに移動してからArchive
、新しいフォルダーを作成しようとしOutput
ます。以下は、ディレクトリを移動するために実行した関数です。
static void moveToArchive()
{
if (!Directory.Exists("Archive")) Directory.CreateDirectory("Archive");
string timestamp = DateTime.Now.ToString("yyyyMMddHHmms");
try
{
Directory.Move("Output", "Archive\\" + timestamp);
}
catch(Exception e)
{
Console.WriteLine("Can not move folder: " + e.Message);
}
}
私が遭遇した問題は私をとても混乱させます...
出力フォルダーをアーカイブに正常に移動できる場合もありますが、失敗する場合もあります。
例外をキャッチして得たエラーメッセージはAccess to path 'Output' is denied.
フォルダ内のすべてのファイルがOutput
使用されていないことを確認しました。常にではなく、時々アクセスが拒否される方法がわかりません。
誰かが私に説明して、問題を解決する方法を教えてもらえますか?
- 編集 -
HansPassant のコメントの後、関数を少し変更して、現在のディレクトリを取得し、フル パスを使用しました。しかし、私はまだ同じ問題を抱えています。
関数は次のようになります。
static void moveToArchive()
{
string currentDir = Environment.CurrentDirectory;
Console.WriteLine("Current Directory = " + currentDir);
if (!Directory.Exists(currentDir + "\\Archive")) Directory.CreateDirectory(currentDir + "\\Archive");
string timestamp = DateTime.Now.ToString("yyyyMMddHHmms");
try
{
Directory.Move(currentDir + "\\Output", currentDir + "\\Archive\\" + timestamp);
}
catch(Exception e)
{
Console.WriteLine("Can not move folder: " + e.Message);
}
}
現在のディレクトリを印刷したところ、期待どおりでしたが、フルパスの使用にはまだ問題があります。Access to path 'C:\Users\Me\Desktop\FormApp\Output' is denied.
- 編集 -
みなさん、回答とコメントありがとうございます。
この部分を見逃している方もいらっしゃると思いますので、もう少し強調します。
Directory.Move() が機能する場合と失敗する場合があります。
関数が成功した場合、問題はありませんでした。Output
フォルダが移動されますArchive
関数が失敗すると、 Access to path deniedという例外メッセージが表示されました。