Я пишу это приложение Windows Form в Visual Studio 2010 с использованием C#.Directory.Move(): Access to Path Denied
Существует кнопку Выполнить на форме, пользователь нажал на кнопку, программа будет генерировать некоторые файлы и хранятся в папке 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);
}
}
Проблема я столкнулся путает меня много ...
Есть несколько раз, что я могу успешно переместить папку вывода в архив, но иногда это не удается.
Сообщение об ошибке я получил от ловли исключения составляет Access to path 'Output' is denied.
Я проверил, что все файлы в папке Output
не используются. Я не понимаю, как иногда запрещается доступ и не все время.
Может кто-нибудь объяснить мне и показать мне, как решить проблему?
--Edit--
После 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.
--Edit--
Спасибо всем за ответы и комментирования.
Я думаю, что некоторые из вас пропустили эту часть, поэтому я собираюсь подчеркнуть ее немного больше.
Directory.Move() иногда работает, а иногда и не работает.
Когда функция прошла успешно, проблем не возникло. папка перемещена в Archive
Когда функция не работает, сообщение об ошибке, которое я получил, было Доступ к пути запрещен.
Убедитесь, что существует папка «Выход» и что в родительском каталоге нет файла с именем «Выход» (без расширения файла). – jgauffin
@jgauffin. Папка вывода существует и ни один из файлов внутри нее не указан. Output , Когда moveToArchive() терпит неудачу, вновь созданные выходные файлы были созданы в папке Outuput, переписывая файлы, созданные из предыдущих прогонов. – sora0419
Этот код критически зависит от правильности установки Environment.CurrentDirectory. Это происходит неправильно, это самая худшая глобальная переменная. Всегда используйте полные имена путей, например c: \ foo \ bar \ baz. И * никогда не полагайтесь на возможность записывать файлы c: \ program, UAC останавливается на этом. –