Xpoint
   [напомнить пароль]

c#: Как определить, кем занят файл

Метки: [без меток]
2009-03-02 11:23:40 [обр] Top manager(0/2)[досье]

Я не пойму почему происходит такая вещь:

идет работа с файлом, а в конце нужно его удалить.

File.Delete(...)

из 10 файлов у пары получится ошибка ошибки доступа. В чем причина не пойму. Я уже отключил все работы с файлом просто поставил в цикле через 3 секунды копирование и удаление файла. И все равно. Такое ощущение что команда

File.Delete(...)

в asp.net глючит

спустя 27 минут [обр] MiRacLe(0/80)[досье]
это не антивирус или система контроля версий?
спустя 15 часов [обр] Василий Свиридов(47/175)[досье]
Скачайте Process Explorer с сайта SysInternals. В нём можно посмотреть кем занят тот или иной файл...
спустя 1 день 11 часов [обр] Top manager(0/2)[досье]

Василий Свиридов[досье] если бы все было так просто... :)

дело в том, что до запуска проги и после в фаре, я проверял, файл переименовывается, удаляется, с ним все ок, но как запускаю прогу, она почему то выдает ексепшин (не всегда)

спустя 4 часа 32 минуты [обр] Василий Свиридов(47/175)[досье]
Покажите код...
спустя 1 день 10 часов [обр] Top manager(0/2)[досье]
using System;
using System.IO;
using System.Threading;
using System.Text;

namespace CP866Encoder.BU
{
    class MTFile
    {
        public FileInfo file = null;
        public int status = 0;
        public int encoding = 0;
        public Exception exception = null;
        public bool moveFileToBuffer = false;

      private string iniParamKey_PaymentIsBrokenIf = "Payment is broken if";

      public bool process(string fileTo, bool cancelCheck)
      {
         bool err = false;
         string iniKeyCompletedDateTime = "Process date and time";
         this.exception = null;

         if (!cancelCheck)
         {
            #region Errors
            #region Encoding not detected
            if (this.encoding < 1)
            {
               this.exception = new Exception("Encoding not detected");
               err = true;
            }
            #endregion
            #region File already processed
            if (Program.completedFile.read(this.file.Name, iniKeyCompletedDateTime) != "")
            {
               this.exception = new Exception("File " + this.file.Name + " already proccessed in " + Program.completedFile.read(this.file.Name, iniKeyCompletedDateTime));
               this.moveFileToBuffer = true;
               err = true;
            }
            #endregion
            #region File has incorrect encoding
            if ((Program.ini.read("Parameters", iniParamKey_PaymentIsBrokenIf) == "File encoding CP866" && this.encoding == 866) || (Program.ini.read("Parameters", iniParamKey_PaymentIsBrokenIf) == "File encoding CP1048" && this.encoding == 1048))
            {
               this.exception = new Exception("File " + this.file.Name + " has incorrect encoding (" + this.encoding.ToString() + ")");
               this.moveFileToBuffer = true;
               err = true;
            }
            #endregion
            #endregion
         }

         if (err)
         {
            return false;
         }

         try
         {
            Program.completedFile.write(this.file.Name, "Encoding", this.encoding.ToString());
            Encoding encodingFrom = Encoding.GetEncoding(this.encoding == 1048 ? 1251 : this.encoding);
            Encoding encodingTo = Encoding.GetEncoding(1251);
            byte[] bytes = BU.Util.getFileBytes(this.file, encodingFrom);

            if (bytes == null)
            {
               this.exception = new Exception("Can't read file or file is empty.");
               return false;
            }

            string fileBody = encodingFrom.GetString(bytes);
            fileBody = BU.Util.kazCp866ToCp1251(fileBody);

            
                StreamWriter streamWriter = new StreamWriter(fileTo, false, encodingTo);
            streamWriter.Write(fileBody);
            streamWriter.Close();
            this.status = 1;
                this.file.Delete();
                File.Delete(this.file.FullName); //Вот тута и происходит ошибка
            Program.completedFile.write(this.file.Name, iniKeyCompletedDateTime, DateTime.Now.ToString("g"));
         }
         catch (Exception exception)
         {
            BU.EMail.send("Error", this.file.FullName, this.encoding, exception.Message);
            if (File.Exists(fileTo))
            {
               File.Delete(fileTo);
            }
            this.exception = exception;
         }
         return true;
      }
    }
}
спустя 4 часа 28 минут [обр] Василий Свиридов(47/175)[досье]
this.file.Delete();
File.Delete(this.file.FullName); //Вот тута и происходит ошибка

А почему удаляете 2 раза?

Кстати прикол с Exception тоже не совсем понятен... Вы знакомы с throw?

спустя 6 часов [обр] Top manager(0/2)[досье]

Василий Свиридов[досье]
сорри, тама одну строчку нужно закоментить, верхнюю

нет

Powered by POEM™ Engine Copyright © 2002-2005