IOException on Directory。使用该目录的进程后移动

时间:2019-07-04 11:21:30

标签: c# .net-core

我有一个.NET Core项目,该项目在MongoDB上执行了一些操作。 其中之一是检查当前的mongod版本,然后更改bin目录的名称(此目录包含mongod.exe文件)。

由于某种原因,如果我在检查mongod版本后没有执行Thread.Sleep,我将无法进行目录重命名,因为我遇到以下异常:

  

System.IO.IOException:拒绝访问路径“ C:\ MyMongo \ bin”。

请注意,在GetMongoVersion方法中,我在“返回版本”消息之前收到了“ ### EXITED ###”消息。

GetMongoVersion方法:

public Version GetMongoVersion(string path)
{
    Version version = null;
    var mongoServicePath = Path.Combine(GlobalConfiguration.Configuration["MongoServicePath"], "bin");

    using (var process = new Process())
    {
        process.StartInfo = new ProcessStartInfo
        {
            WorkingDirectory = mongoServicePath,
            UseShellExecute = false,
            FileName = Path.Combine(mongoServicePath, MongodFileName),
            Arguments = "--version",
            RedirectStandardOutput = true,
            CreateNoWindow = true
        };
        process.EnableRaisingEvents = true;
        process.Exited += (sender, args) => _log.Fatal("### EXITED ###");
        process.Start();
        process.WaitForExit();

        while (version == null)
        {
            var line = process.StandardOutput.ReadLine();
            if (line != null && line.StartsWith("db version"))
            {
                var fullVersion = line.Split(' ')[2].Substring(1);
                var major = int.Parse(fullVersion[0].ToString());
                var minor = int.Parse(fullVersion[2].ToString());
                version = new Version(major, minor);
            }
        }

        _log.Fatal($"Returning version: {version}");
        return version;
    }
}

RenameDirectory方法:

public bool RenameDirectory(string currentName, string newName)
{
    try
    {
        Directory.Move(currentName, newName);
        return true;
    }
    catch (Exception ex)
    {
        _log.Error(ex);
        return false;
    }
}

0 个答案:

没有答案