У меня есть приложение, которое просматривает некоторые файлы для старых данных. Чтобы убедиться, что мы не повредили хорошие проекты, я копирую файлы во временное место. Некоторые из каталогов, которые я проверяю, это каталоги исходного кода, и у них есть папки .svn. Мы используем Subversion для управления нашим кодом.UnauthorizedAccessException для вновь созданных файлов
Как только я просмотрел все файлы, я хочу удалить временный кеш. Звучит просто, не так ли?
По какой-то причине все мои .svn-каталоги не будут удаляться из кеша. Они разбивают приложение.
По причинам (слишком глубоко, чтобы войти сюда), я должен использовать временную папку, поэтому просто «сканировать исходный файл» не может быть и речи по политическим причинам.
Я могу войти в проводник и удалить их. Нет проблем. Нет предупреждений. Просто удаляет. Но сбой кода с «Access to {file} запрещен». Я нахожусь наедине с этим, поэтому любая помощь будет оценена.
Хотя я упростил функцию LITTLE ради вашего здравомыслия, код ДЕЙСТВИТЕЛЬНО об этом прост.
List<string> tmpCacheManifest = new List<string>();
string oldRootPath = "C:\\some\\known\\directory\\";
string tempPath = "C:\\temp\\cache\\";
foreach (string file in ListOfFilesToScan)
{
string newFile = file.Replace(oldRootPath, tempPath);
// This works just fine.
File.Copy(file, newFile);
tmpCacheManifest.add(newFile);
}
// ... do some stuff to the cache to verify what I need.
// Okay.. I'm done.. Delete the cache.
foreach (string file in tmpCacheManifest)
{
// CRASH!
File.Delete(file);
}
* Update *: Исключение составляет UnauthorizedAccessException. Текст - «Доступ к пути» C: \ temp \ cache \ some-sub-dirs \ .svn \ entries 'отрицается. "
Это происходит под XP, XP-Pro и Windows 7.
* Update 2 * Ни один из моих проверки даже не пытается смотреть на подрывных файлов. Мне они действительно нужны. Это часть политического дерьма. Я должен показать, что КАЖДЫЙ файл был скопирован ... если он был отсканирован или нет.
И я понимаю, что обычные подозреваемые для File.Delete. Я понимаю, что означает UnauthorizedAccessException. У меня нет доступа. Это без проблем. Но я просто скопировал файл. Как я могу NOT есть доступ к файлу?
* Обновление 3 * Ответ был включен в «только для чтения». Вот код, который я использовал, чтобы исправить это:
foreach (string file in ListOfFilesToScan)
{
string newFile = file.Replace(oldRootPath, tempPath);
// This works just fine.
File.Copy(file, newFile);
//// NEW CODE ////
// Clear any "Read-Only" flags
FileInfo fi3 = new FileInfo(fn);
if ((fi3.Attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
{
fi3.Attributes = (FileAttributes)(Convert.ToInt32(fi3.Attributes) - Convert.ToInt32(FileAttributes.ReadOnly));
}
tmpCacheManifest.add(newFile);
}
// ... do some stuff to the cache to verify what I need.
Зачем? Может быть заблокирован файл. – 2010-01-05 16:21:28
File.Delete может вызывать как минимум семь разных типов исключений. Какой из них вы получаете? –
@Roboto, Вы имеете в виду: WTE? TCBAFL? –