Directory.Move():拒绝访问路径

sor*_*419 6 c# directory exception-handling access-denied

我正在使用C#在Visual Studio 2010中编写此Windows窗体应用程序.

表单上有一个Execute按钮,用户将点击按钮,程序将生成一些文件并存储在Output文件夹中(由程序使用创建Directory.CreateDirectory())

我想创建一个Archive文件夹来保存以前运行的输出文件.

在每次运行开始时,我尝试将现有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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题让我很困惑......

有时我可以成功地将Output文件夹移动到存档,但有时它会失败.

我从捕获异常中获得的错误消息是 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我打印出当前目录,它正如我所期待的那样,我仍然无法使用完整路径. Access to path 'C:\Users\Me\Desktop\FormApp\Output' is denied.

- 编辑 -

谢谢大家的回答和评论.

我想你们有些人会想念这一部分,所以我会更加强调它.

Directory.Move()有时会工作,有时会失败.

当函数成功时,没有问题.Output文件夹被移动到Archive

当函数失败时,我收到的异常消息是Access path path denied.

sor*_*419 9

谢谢大家的回复和帮助.我已经弄清楚问题是什么了.

这是因为有一个文件没有完全关闭.

我正在检查生成的文件,并错过了程序正在读取的文件.

生成的所有文件都已完全关闭.这是我StreamReader以前打开但未关闭的一个文件.我修改了代码,现在没有问题,所以我认为这是问题所在.

感谢所有的评论和答案,这绝对有助于我思考和解决问题.