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

我认为问题在于微软已经改变了文件夹的结构,并且“显然”他们的员工仍在寻找“好的旧方式”。过去,一个文件夹曾经有“..”,这是“文件夹标记”(当然是 dos),我可以看到这不再存在。我做了什么:我将一个虚拟文件放入/复制到一个新文件夹、一个图像或其他任何东西中,而不是使用“目录”,我使用 file.exists 我认为答案可能在属性中。

于 2013-06-13T12:17:12.183 回答
0

经历其实是一样的。这是由于使用软链接(包含有关文件夹信息的文本文件)而不是连接。

递归加载第一个文件夹,然后是它们的文件并修复错误的连接。长文件名等

public static List<string> GetFilesEveryFolder(string folder, string mask, SearchOption searchOption, bool _trimA1 = false)
{
    List<string> list = new List<string>(); ;
    List<string> dirs = null;

    try
    {
        dirs = GetFoldersEveryFolder(folder, "*").ToList();
    }
    catch (Exception ex)
    {
        throw new Exception("GetFiles with path: " + folder, ex);
    }

    foreach (var item in dirs)
    {
        try
        {
            list.AddRange(Directory.GetFiles(item, mask, SearchOption.TopDirectoryOnly));
        }
        catch (Exception ex)
        {
            // Not throw exception, it's probably Access denied on Documents and Settings etc
            //ThrowExceptions.FileSystemException(type, RH.CallingMethod(), ex);
        }
    }

    CA.ChangeContent(list, d => SH.FirstCharLower(d));

    if (_trimA1)
    {
        list = CA.ChangeContent(list, d => d = d.Replace(folder, ""));
    }
    return list;
}
于 2019-10-09T23:45:50.297 回答