我正在尝试读取EmbeddedResource(默认配置文件)并将其写入文件。在那之后,我应该阅读文件并为了使事情变得更容易,我决定一步一步地做到这一点。
private string CreateDefaultFile()
{
using (var stream = Shelter.Assembly.GetManifestResourceStream($@"Mod.Resources.Config.{_file}"))
{
if (stream == null)
throw new NullReferenceException(); //TODO
using (var ms = new MemoryStream())
{
using (var fs = new FileStream(Shelter.ModDirectory + _file, FileMode.Create, FileAccess.Write, FileShare.Read))
{
byte[] buffer = new byte[512];
int bytesRead;
while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, bytesRead);
fs.Write(buffer, 0, bytesRead);
}
fs.Flush();
ms.Flush();
return Encoding.UTF8.GetString(ms.ToArray());
}
}
}
}
这确实创建了文件,但是返回值似乎不应该工作。内容似乎正确,但是JSON.Net无法解析此错误:
JsonReaderException: Unexpected character encountered while parsing value: . Path '', line 0, position 0.
。使用File.ReadAllText(...)
代替Encoding.UTF8.GetString(ms.ToArray())
似乎可行,所以我猜测这是将流加载到字符串中的一个问题。
此外,由于文件较小,因此不需要分块部分。我在多个地方都读过,更好地使用了它,所以我更喜欢它。
(定位.NET Framework 3.5
)
答案 0 :(得分:0)
感谢dbc评论,Tergiver answer我解决了这个问题。
代码:
private string CreateDefaultFile()
{
using (var stream = Shelter.Assembly.GetManifestResourceStream($@"Mod.Resources.Config.{_file}"))
{
if (stream == null)
throw new NullReferenceException(); //TODO
using (var ms = new MemoryStream())
{
using (var fs = File.Open(Shelter.ModDirectory + _file, FileMode.Create, FileAccess.Write, FileShare.Read))
{
byte[] buffer = new byte[512];
int bytesRead;
while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, bytesRead);
fs.Write(buffer, 0, bytesRead);
}
fs.Flush();
ms.Flush();
byte[] content = ms.ToArray();
if (content.Length >= 3 && content[0] == 0xEF && content[1] == 0xBB && content[2] == 0xBF)
return Encoding.UTF8.GetString(content, 3, content.Length - 3);
return Encoding.UTF8.GetString(content);
}
}
}
}