. NET і Заблоковані файли... (Українська (Ukrainian))

. NET і Заблоковані файли...

Friday, 20 February 2004

//

1 minute read

Гаразд, будь- хто може пояснити, чому я не можу явно перевірити, чи можу я заблокувати файл перед читанням з нього (тобто, перевірте, чи ніхто інший не блокує файл перед тим, як його прочитати). Я використовую чудовий файл FileSystemWatcher зачекати на створення файлів у каталозі перед запуском завдання - добре, але, здається, не є легким способом перевірити, що файл " придатний " до читання, перш ніж починати читання... зараз мій спосіб виконати це завдання - спробувати прочитати - і покласти блок для читання - на файл з використанням команди FileStream і зловити помилку, якщо файл було заблоковано іншим процесом... подібно до цього... але це не так. Я відмовляюся використовувати винятки (які також є дуже повільними) для цього завдання... чому не може FileStram. Чи може програма перевірити, чи немає замків B перед відкриттям файла???

        private static int m_ReadAttempts = 0;
        private string  ReadFileFromDisk(string filePath)
        {
            try
            {
                if(!File.Exists(filePath))
                {
                    MessageBox.Show("Sorry, but the file specified " + Environment.NewLine + filePath + Environment.NewLine + "Cannot be found");
                    return string.Empty;
                }
            using(FileStream fs = new FileStream(filePath,FileMode.Open,FileAccess.Read,FileShare.Read))
                {
                        using(StreamReader sr = new StreamReader(fs)) 
                        {
                            string tmpStr = sr.ReadToEnd();
                            sr.Close();
                            m_ReadAttempts =0;
                            return tmpStr;
                        }
                
                }        
            }
            catch(IOException ex)
            {
                    if(m_ReadAttempts < 10)
                {
                    Thread.Sleep(500);
                    m_ReadAttempts++;
                    return ReadFileFromDisk(filePath);
                }
                else
                {
                    throw ex;
                }
            }
        }
Finding related posts...
logo

© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.