Файл блокируется при попытке выполнить удаление - PullRequest
0 голосов
/ 20 января 2012

У меня есть служба, которая читает документ xml из каталога (работает нормально), сохраняет данные в sql (работает нормально), и после этого я копирую файл в каталог FINISHED (работает нормально) и удаляю файл (НЕ работает) из чтения каталога.ПРОБЛЕМА, которая у меня есть, заключается в том, что файл блокируется, когда я пытаюсь выполнить УДАЛЕНИЕ.Буду признателен за любой совет, чтобы я мог найти, где файл заблокирован.

static public Res GetResMn(string FileName)             
XDocument root = null;
using (var file = new FileStream(FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
            using (StreamReader oReader = new StreamReader(file, Encoding.GetEncoding("ISO-8859-1")))
            {
                root = XDocument.Load(oReader);
                oReader.Close();
                oReader.Dispose();
            }

Вот код для копирования и удаления

    void CopyFile(string FileToMove, string MoveLocation)
    {
        try
        {
             System.IO.File.Copy(FileToMove, MoveLocation, true);
            //System.IO.File.Move(FileToMove, MoveLocation);

                File.Delete(FileToMove);
        }
        catch (Exception e)
        {
            WriteLogFile("The process failed: {0} " + e.ToString());
        }
    }

Это код, когда я получаюзначения из файла

    var myElement1 = root.Descendants(XName.Get("rnID", @"namespace.2.0")).FirstOrDefault();
    if (myElement1 != null)
    {
        myRPr.rnID = root.Descendants(XName.Get("rnID", @"namespace.2.0")).FirstOrDefault().Value;
    }

Это ошибка, которую я получаю в лог-файле

{0} System.UnauthorizedAccessException: Access to the path 'C:\ReadingDirectory\FileName.xml' is denied.
    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.File.Delete(String path)
    at OperaWinSrvc.OperaWinSrvc.ReadFiles()

Я получаю такую ​​же ошибку, когда пытался System.IO.File.Move

Ответы [ 2 ]

1 голос
/ 20 января 2012

Убедитесь, что вы вызываете .Close() для файлового объекта перед попыткой удаления, и что у вас также есть разрешения безопасности для удаления из этой папки.

Доступ запрещен, как правило, проблема с разрешениями, но иногда она может быть вызвана состоянием блокировки файла.

0 голосов
/ 20 января 2012

После нескольких проверок в разных местах я наконец нашел решение своей проблемы. В установщике службы для свойства Account было установлено значение Local Service, я изменил его на LocalSystem, переустановил службу, и теперь она работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...