У меня есть файл .json, который обрабатывает роли пользователя, и я написал репозиторий, который отвечает за добавление / удаление ролей для пользователей.ПБ в том, что когда я изменяю файл, я хочу быть уверен, что никто, кроме меня, не получит к нему доступ.
Вот (примерно) код, который я использую:
using (var fileStream = new FileStream(_rolesFilePath, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
using (var streamReader = new StreamReader(fileStream))
using (var streamWriter = new StreamWriter(fileStream))
{
var oldContent = streamReader.ReadToEnd();
var contentObject = Deserialize(oldContent);
Modify(contentObject)
var newContent = Serialize(contentObject);
fileStream.Seek(0, SeekOrigin.Begin);
streamWriter.Write(newContent);
}
ПБ с этимРешение состоит в том, что если newContent
строка короче, чем oldContent
, то некоторые символы будут оставаться в файле.
Решение, которое я нашел, заключается в добавлении следующего кода:
using (var fileStream = new FileStream(_rolesFilePath, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
using (var streamReader = new StreamReader(fileStream))
using (var streamWriter = new StreamWriter(fileStream))
{
//...
var newContent = Serialize(contentObject);
var endPosition = fileStream.Position;
fileStream.Seek(0, SeekOrigin.Begin);
streamWriter.Write(newContent);
streamWriter.Flush();
while (fileStream.Position < endPosition)
{
streamWriter.WriteLine();
streamWriter.Flush();
}
}
Это работает хорошо, но не выглядит очень чистым для меня.Есть ли лучшее решение, обеспечивающее контроль над файлом?
Заранее спасибо, Томас