Отойду от темы 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.
Пример кода:
Очень удобное вещь, особенно если работаете также в многопоточном режиме. Советую это сохранить и использовать.
#Csharp, #File
Работают два разных приложения:
Одно создаёт текстовый файл и записывает в него содержимое.
Второе читает это файл.
Проблема заключается в том, что первое приложение не успевает записывать в него информацию, как тут же второе его считывает, получая при этом ошибку "Файл пуст".
Решение для этой проблемы весьма простое:
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