Ramana Bellary Ответов: 1

Получение ошибки доступа к файлам при удалении файла в C#


Привет,
Я использую AsParallel для перебора списка файлов в каталоге, чтобы скопировать их в какое-то другое место, после чего, когда я пытаюсь удалить их, я получаю ошибку доступа к файлу, говоря, что он используется другим процессом.

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

Что я уже пробовал:

command.OutputDirectory
                    .GetFilesWhere(source => source.Extension.In(command.OutputExtensions))
                    .AsParallel()
                    .ForEach(source =>
                    {
                        Logger.LogInfo(@"Copying [{0}] to [{1}]...".FormatWith(source.FullName, OutputDirectory));
                        source.CopyTo(OutputDirectory.PathCombine(source.Name), true);                        
                        try
                        {
                             source.Delete();
                        }
                        catch (Exception e)
                        {
                            Logger.LogError("Exception while deleting the output file: " + e.Message);
                        }
                    }
                    );

Ramana Bellary

Мои сомнения состоят в том, если источник.CopyTo все еще держит ссылку на файл.
Или это вызвано из-за использования методами asparallel !!!

1 Ответов

Рейтинг:
1

OriginalGriff

Сообщение об ошибке говорит вам, в чем заключается проблема:

I am getting file access error saying it is being using by another process

Файл используется: он открыт и в результате заблокирован.

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

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