2016-09-03 19 views
1

私は生成ファイル用のフォルダを準備するには、次のコードを持っている:私は通常、それを実行するとラインで、まさにそれが動作ごとに二度目、そしてそれがDirectoryNotFoundExceptionをスローし、他の時間をDirectory.CreateDirectoryは非同期ですか、それとも何ですか?

if (Directory.Exists(outputDir)) 
{ 
    Directory.Delete(outputDir, true); 
} 
Directory.CreateDirectory(outputDir); 

を:

File.WriteAllLines(filePath, CreateRows(TestLineCount, TestSampleCount)); 

Could not find a part of the path 'C:\Dev\Android\Projects...と言っています。 filePathの最後のフォルダが削除されていますが、それを削除してからもう一度作成していますので、常にそこに置いてください。私がラインにDirectory.CreateDirectory(outputDir);のブレークポイントを置くと、少しの遅延があると、アプリは毎回動作します。自動遅延を導入した場合、すなわち:

Directory.CreateDirectory(outputDir); 
Thread.Sleep(500); 

毎回動作します。確かにこれらの呼び出しはすべて完了するまでブロックする必要がありますので、outputDirはいつもそこにありますか?

+1

のようにこれを呼び出すときCreateDirectoryが、それはフォルダが作成されていない場合はスローされていることを確認するために返す直前にチェックを持っているので、あなたは完全なスタックトレースを含めることができます。だから、FileStream.Initのどこが失敗したのか、そのメソッドが呼び出しスタックの先頭にあると思っています。どのOSでこのbtwですか? – rene

+0

実際に問題を再現するコードとその呼び出しスタックを含む完全な例外を投稿してください。あなたは 'Exception.ToString()'でそれを得ることができます。 'CreateDirectory'は非同期ではありません。あなたはおそらくリモートシェアで作業していますか? –

答えて

0

私はそれが非同期ではないと思われるが、あなたがその

Directory.CreateDirectory(outputDir); //App is trying to create directory 
//successfully created but depends on OS how fast OS commits the changes 

Thread.Sleep(500); //assuming physically creation on Hard and its availability in OS took less then 500ms then this wait works or else we have to wait more 

//this delay is actually totally non generic since the time differs OS to OS 


// its just a rough guess that changes will be committed within 500ms 

if(!Directory.Exists(outputDir)) 
    //if still not exists Your OS que is being processed very slow due to 
    //some not known reason! so you have to wait more then 500ms 
+0

それは実際にはバグです。変更がコミットされるまで、 'CreateDirectory'はまったく返されません。私は 'CreateDirectoryAsync'からしか期待していません。 – ProfK

+0

@ProfKどこで 'CreateDirectoryAsync'を見つけましたか?私はそれがWinRTで利用可能であると聞いたが、それは無関係な結果を返すためにグーグルである。とにかく、 'CreateDirectory'は非同期ではありません。完全な例外(呼び出しスタックを含む)と実際に問題を再現するコード –

+0

@PanagiotisKanavos私は 'CreateDirectoryAsync'を見つけませんでした。私は、 'CreateDirectory'が非同期であるかのように振る舞います。 – ProfK

関連する問題