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.
谢谢大家的回复和帮助.我已经弄清楚问题是什么了.
这是因为有一个文件没有完全关闭.
我正在检查生成的文件,并错过了程序正在读取的文件.
生成的所有文件都已完全关闭.这是我StreamReader以前打开但未关闭的一个文件.我修改了代码,现在没有问题,所以我认为这是问题所在.
感谢所有的评论和答案,这绝对有助于我思考和解决问题.