У меня есть XML-файл, в котором есть разные отметки, которые мне нужно обновить и забрать. эта метка взята из API и используется, поэтому я получаю только новые данные. однако, когда я пытаюсь записать данные или прочитать файл, он все время блокируется. это 2 функции, которые я использую для записи или чтения из файла.
private void SetMark(string name, string mark)
{
var marksfile = (string)_appSettings.GetValue("MarksFile", typeof(string));
_marks = new dsMarks();
try
{
if (File.Exists(marksfile))
{
using (var reader = new StreamReader(marksfile))
{
_marks.ReadXml(reader);
}
}
}
catch (Exception)
{
_marks = null;
throw;
}
var row = _marks.Mark.FindByName(name);
row.TimeMark = mark;
_marks.AcceptChanges();
using (var writer = new StreamWriter(marksfile))
{
_marks.WriteXml(writer);
}
}
private string GetMark(string name)
{
var marksfile = (string)_appSettings.GetValue("MarksFile", typeof(string));
_marks = new dsMarks();
try
{
if (File.Exists(marksfile))
{
using (var reader = new StreamReader(marksfile))
{
_marks.ReadXml(reader);
}
}
}
catch (Exception)
{
_marks = null;
throw;
}
var row = _marks.Mark.FindByName(name);
var mark = row.TimeMark;
return mark;
}
Все это в документации для файлового потока docs.microsoft.com/en-us/dotnet/api/…
Возможно ли, чтобы в вашей программе одновременно выполнялось несколько операций записи / чтения?





Возможно, вы захотите использовать FileStream вместо StreamReader, поскольку первый блокирует файл от других средств доступа. FileStream лучше подходит для чтения.
private string GetTrimbleMark(string name)
{
var marksfile = (string)_appSettings.GetValue("MarksFile", typeof(string));
_marks = new dsMarks();
try
{
if (File.Exists(marksfile))
{
using (var reader = new FileStream(marksfile, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite))
{
_marks.ReadXml(reader);
}
}
}
catch (Exception)
{
_marks = null;
throw;
}
var row = _marks.Mark.FindByName(name);
var mark = row.TimeMark;
return mark;
}
Я добавлю доступ к файлу перед тем, как открыть свой стрим-ридер
if (File.Exists(marksfile))
{
FileStream fs = new FileStream(marksfile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
using (var reader = new StreamReader(fs))
{
_marks.ReadXml(reader);
}
}
это сработало один раз, но потом по какой-то причине мой файл был пуст и больше не было строк. это единственная программа, которая обращается к файлу, и это единственные методы, которые обрабатывают файл
хорошо, но у вас может быть операция записи одновременно с операцией чтения файла?