gpt4 book ai didi

c# - Directory.Move(): Access to Path is Denied

转载 作者:太空狗 更新时间:2023-10-29 21:04:57 25 4
gpt4 key购买 nike

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

窗体上有一个执行按钮,用户点击按钮,程序会生成一些文件并存储在Output文件夹中(这是程序使用创建的)目录.CreateDirectory())

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

在每次运行开始时,我尝试将现有的 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);
}
}

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

有时我可以成功将 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);
}
}

我打印出当前目录,它正如我所期望的那样,但我仍然无法使用完整路径。 访问路径“C:\Users\Me\Desktop\FormApp\Output”被拒绝。

--编辑--

谢谢大家的回答和评论。

我想你们中的一些人错过了这部分,所以我要强调一点。

Directory.Move() 有时有效,有时失败。

当功能成功时,没有问题。 Output 文件夹移动到 Archive

当函数失败时,我得到的异常消息是访问路径被拒绝。

最佳答案

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

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

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

所有生成的文件都已完全关闭。这是我使用 StreamReader 打开但没有关闭的一个文件。我修改了代码,现在没有问题,所以我想这就是问题所在。

感谢所有评论和回答,这绝对有助于我思考和找出问题。

关于c# - Directory.Move(): Access to Path is Denied,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18924789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com