我正在使用 C# 在 Visual Studio 2010 中编写此 Windows 窗体应用程序。
表单上有一个执行按钮,用户点击该按钮,程序将生成一些文件并存储在Output
文件夹中(由程序使用创建Directory.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);
}
}
我遇到的问题让我很困惑......
有时我可以成功地将输出文件夹移动到存档,但有时会失败。
我从捕获异常中得到的错误消息是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);
}
}
我打印出当前目录,它正如我所期望的那样,但我仍然无法使用完整路径。Access to path 'C:\Users\Me\Desktop\FormApp\Output' is denied.
- 编辑 -
谢谢大家的回答和评论。
我想你们中的一些人会错过这部分,所以我要再强调一点。
Directory.Move() 有时有效,有时失败。
当函数成功时,就没有问题了。Output
文件夹移动到Archive
当函数失败时,我得到的异常消息是拒绝访问路径。