【发布时间】:2019-03-22 21:46:16
【问题描述】:
我在一个进程中生成一个文本文件,该文件最后循环通过输入给它的字符串列表,并通过MemoryStream 和StreamWriter 将该列表转换为byte[]。然后使用BLOB 数据类型将byte[] 保存到Oracle 数据库中。虽然它适用于大多数数据(通常是数千行。我的数据在 5,000 到 40,000 之间,无论如何结果都是一样的),但我有一个特定的message,它在最后,但它总是丢失.通常,文件中的最后一行会被中途截断。
生成byte[]的函数:
public byte[] GenerateFileData()
{
var fileData = new byte[0];
using (var ms = new MemoryStream())
{
using (var sw = new StreamWriter(ms))
{
Messages.ForEach(x => sw.WriteLine(x)); // Messages is a list of strings in this class
fileData = ms.ToArray();
}
}
return fileData;
}
将byte[]保存到数据库的函数:
public void SaveLogFile(int entityId, byte[] fileData)
{
using (var context = new SomeDBContext())
{
var entity= context.SomeEntity.FirstOrDefault(x => x.Id == runId);
if(entity != null)
{
entity.LOG_FILE = fileData;
context.SaveChanges();
}
}
}
最后,将数据转换为文件的函数:
[HttpGet]
public FileResult GetLogFile(int id = 0)
{
var fileData = new byte[0];
using (var context = new SomeDbContext())
{
var entity = context.SomeEntity.FirstOrDefault(x => x.Id == id);
fileData = entity.LOG_FILE;
}
var fileName = "SomethingSomething" + id.ToString();
return File(fileData, "text/plain", fileName);
}
【问题讨论】:
-
尝试像这样生成
byte[]-->System.Text.Encoding.Unicode.GetBytes(string.Join(Environment.NewLine, Messages));
标签: c# arrays asp.net-mvc oracle entity-framework