UnauthorizedAccessException на недавно созданных файлах

У меня есть приложение, которое просматривает некоторые файлы для старых данных. Чтобы удостовериться, что мы не повреждаем хорошие проекты, я копирую файлы во временное местоположение. Некоторые каталоги, которые я проверяю, являются каталогами исходного кода, и у них есть .svn папки. Мы используем Подрывную деятельность для управления нашим кодом.

Как только я перерыл все файлы, я хочу удалить временный кэш. Звучит легким, правильно?

По некоторым причинам все мои .svn каталоги не удалят из кэша. Они разрушают приложение.

По причинам (слишком глубоко для входа здесь) я должен использовать временную папку, поэтому просто "сканируют исходный файл", вне рассмотрения по политическим причинам.

Я могу войти в проводник и удалить их.Нет проблем. Никакие предупреждения. Просто удаляет. Но катастрофические отказы кода с "Доступом к {файлу} отклонены". Я в своем конце остроумия с этим, таким образом, любая справка ценилась бы.

В то время как я упростил функцию НЕМНОГО ради Вашей исправности, код ДЕЙСТВИТЕЛЬНО об этом простом.

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);
}

* Обновление *: исключением является UnauthorizedAccessException. Текст является "Доступом к пути 'C:\temp\cache\some-sub-dirs\.svn\entries', отклонен".

Это происходит под XP, XP Pro и Windows 7.

* Обновите 2 *, Ни одна из моей проверки даже НЕ ПЫТАЕТСЯ посмотреть на файлы подрывной деятельности. Мне действительно нужны они, как бы то ни было. Это - часть политического дерьма. Я должен показать, что КАЖДЫЙ файл был скопирован..., был ли он просканирован или нет.

И я понимаю то, что обычные подозреваемые для Файла. Удалить. Я понимаю то, что имеет в виду UnauthorizedAccessException. У меня нет доступа. Это - легкая задача. Но я просто скопировал файл. Как у меня НЕ может быть доступа к файлу?

* Обновите 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.

10
задан Jon Seigel 5 January 2010 в 17:04
поделиться

6 ответов

[

] Насколько я помню, Subversion отмечает файлы в своих подкаталогах .svn как доступные только для чтения.[

] [

] Попробуйте сбросить атрибут "только для чтения" перед удалением файла. На самом деле я не знаю никакого C#, но быстрый Google предполагает, что это может сработать: [

]. [
File.SetAttributes(file, FileAttributes.Normal);
]
12
ответ дан 3 December 2019 в 22:37
поделиться

Единственная проблема, которую я вижу, будет в этой части:

// . ...сделайте кое-какие вещи с кэшем, чтобы проверить, что мне нужно.

Если вы все-таки откроете файл и забудете его закрыть, вы все равно будете иметь к нему эксклюзивный доступ, а значит, не сможете удалить его позже.

.
2
ответ дан 3 December 2019 в 22:37
поделиться

Во-первых: "Крэш" означает исключение, верно? Какое? Можете ли вы его поймать и показать?

Второе: вы копируете репозитории подрывной деятельности, хотя вас не волнуют метаданные о подрывной деятельности? Именно об этом и идет речь в svn экспорте (в целевом каталоге нет каталога .svn)

Ответ на первый вопрос - то, что вам на самом деле нужно предоставить. Может быть, что-то захватывает .svn и блокирует некоторые файлы. Может быть, TortoiseSVN (чтобы дать вам красивые иконки оверлея...)?

.
0
ответ дан 3 December 2019 в 22:37
поделиться

Не понимая, что вы так сильно хотите сделать, а как насчет хмодификации на 777 или 775. :-/

Правка:

Заметил, что вы на windows. Вам придется изменить разрешения. Не знаю, как это делают окна :-/

.
-2
ответ дан 3 December 2019 в 22:37
поделиться
[

]Похоже, что у вас нет доступа к удалению файла...[

] [

][]system.io.file.delete[][

] [

]Вышеуказанная ссылка говорит о том, что вы получаете []UnauthorizedAccessException[], когда:[

] [
] [

]вызывающий абонент не имеет требуемого разрешения. [

] [

]- или- [

] [

]- путь - это каталог.[

] [

]- или- [

] [

]- путь, указанный в файле только для чтения.[

] [
] [

]- это один из них.[

]
2
ответ дан 3 December 2019 в 22:37
поделиться
[

] Звучит как разрешение. Сложная проблема, хотя, очевидно, что у вас есть доступ на запись, если File.Copy уже работает....[

] [

]Единственное, о чем я мог подумать, это то, что файл все еще где-то открыт (как другие предлагали, возможно, в вашей [] части [] сделать что-то с кэшем).[

].
1
ответ дан 3 December 2019 в 22:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: