1

タイトルが説明しているように、続行する前にディレクトリが存在するかどうかを確認するプログラムがあります。

そして、チェックが行われると、ディレクトリが存在するときに存在しないと言われます!

ディレクトリ パスを格納するコードは次のとおりです。

string currentDirectory = Path.GetDirectoryName(Application.ExecutablePath);
Console.WriteLine("----" + currentDirectory.ToString());
string tesseractPath = Path.Combine(currentDirectory, @"..\..\..\tesseract");
_wrapper = new AsyncTesseractWrapper(tesseractPath);



public TesseractWrapper(string programLoc)
{
    DirectoryInfo dinfo = new DirectoryInfo(programLoc);
    //DirectoryInfo dinfo = new DirectoryInfo("C:\\Windows");
    ValidateTesseractDirectory(dinfo);
    _tesseractLocation = dinfo.FullName;
}

そして、チェックを実行するためのコード:

private void ValidateTesseractDirectory(DirectoryInfo dinfo)
{
    if (!dinfo.Exists)               
        throw new ArgumentException("Specified program directory must exist.");
    FileInfo[] files;
    files = dinfo.GetFiles(_tessExe);
    if (files.Length != 1)
        throw new ArgumentException("Specified program directory must contain tesseract.exe.");
}

C:\Windows フォルダーが存在するかどうかを確認するなど、いくつかのバリエーションでデバッグを試みましたが、それでもエラーが発生します...

コードに何か問題がありますか、または .Exists メソッドの理解に問題がありますか?

ありがとう!

4

3 に答える 3

3

権限の問題が原因である可能性があります。MSDN を引用するには:

Exists プロパティは、指定されたファイルが存在するかどうかを判断しようとしてエラーが発生した場合、false を返します。これは、無効な文字や文字が多すぎるファイル名を渡す、ディスクに障害がある、ディスクが見つからない、呼び出し元にファイルを読み取る権限がないなどの例外が発生する状況で発生する可能性があります。

于 2012-11-23T14:20:32.117 に答える
0

問題は、Microsoft がフォルダの構造を変更したことと、「明らかに」Microsoft のスタッフがまだ「古き良き方法」を見ていることだと思います。以前は、フォルダには「..」という「フォルダ マーク」がありましたが (もちろん dos)、これはもう存在しないことがわかります。私がやったこと:ダミーファイルを新しいフォルダー、画像などに配置/コピーし、「ディレクトリ」を使用する代わりにfile.existsを使用します。答えは属性にあると思います。

于 2013-06-13T12:17:12.183 に答える