【发布时间】:2018-10-08 09:04:57
【问题描述】:
我有一个处理用户角色的 .json 文件,并且我编写了一个负责向用户添加/删除角色的存储库。 pb 是当我修改文件时,我想确保除了我之外没有人可以访问它。
这是(大致)我使用的代码:
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);
}
此解决方案的 pb 是,如果 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();
}
}
它运作良好,但对我来说看起来不是很干净。有没有更好的解决方案可以确保我保持对文件的控制?
提前致谢, 托马斯
【问题讨论】:
-
我不会说它不干净。我认为这段代码很安静。但是,如果您想要另一种解决方案,您可以删除该文件并创建一个具有相同名称的新文件。然后您确定文件中只有您的文本。
-
@Presi - 删除/创建可以是“活泼的”,因为没有办法在这两个步骤之间对名称保持“锁定”。截断文件的全部/部分是众所周知的操作,“挑战”是弄清楚它是如何在 .NET 中公开的。