Ежедневник IT-ка
133 subscribers
22 photos
4 videos
1 file
43 links
Программируем на практике!!
По вопросам по поводу проектов: @vladimir_dzen
Download Telegram
Отойду от темы WPF, и покажу довольно "тривиальную задачу".

Работают два разных приложения:

Одно создаёт текстовый файл и записывает в него содержимое.
Второе читает это файл.

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

Решение для этой проблемы весьма простое:

1. Создаём метод "IsLockedFile" с возвращаемым типом данных bool.

2. Создаём конструкцию try...catch, для того чтобы словить исключение.

3. Добавляем оператор "using" - для того, чтобы правильно освобождать,сбрасывать,удалять неуправляемые ресурсы(аналог метода Dispose)

4. Обращаемся к классу "File" и его методу Open с его параметрами(где задаём enum или ещё называют перечисление: FileMode.Open, FileAccess.Read, FileShare.None) и создаем конструктор класса "FileStream".

5. Если файл успешно открылся и прочитался, то возвращаем false(закрывая при этом объект класса FileStream), если нет то true. И в том и в том случае выходим из метода IsLockedFile.

6. В коде вызываю этот метод передавая путь к файлу. Используя цикл "while" т.е. этот будет работать до тех пор, пока возвращает true.

Пример кода:

string pathFile = "D:\Example.txt";
while (IsLockedFile(pathFile));

public bool IsLockedFile(string fileName)
{
try
{
using (FileStream fs = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.None))
{
fs.Close();
return false;
}
}
catch (Exception ex)
{
return true;
}
return true;
}

Очень удобное вещь, особенно если работаете также в многопоточном режиме. Советую это сохранить и использовать.

#Csharp, #File