在内存中创建并写入文本文件并一次性转换为字节数组
Create and write to a text file inmemory and convert to byte array in one go
如何使用正确的方法创建 .csv 文件implicitly/automatically,将文本添加到内存中的该文件,然后将内存中的数据转换为字节数组?
string path = @"C:\test.txt";
File.WriteAllLines(path, GetLines());
byte[] bytes = System.IO.File.ReadAllBytes(path);
用这种方法我总是创建一个文件(好),写入它(好)然后关闭它(坏)然后从一个路径再次打开文件并从硬盘读取它(坏)
我该如何改进?
更新
一个几乎不错的方法是:
using (var fs = new FileStream(@"C:\test.csv", FileMode.Create, FileAccess.ReadWrite))
{
using (var memoryStream = new MemoryStream())
{
fs.CopyTo(memoryStream );
return memoryStream .ToArray();
}
}
但我无法将文本写入该文件流...只是字节...
更新 2
using (var fs = File.Create(@"C:\temp\test.csv"))
{
using (var sw = new StreamWriter(fs, Encoding.Default))
{
using (var ms = new MemoryStream())
{
String message = "Message is the correct ääüö Pi(\u03a0), and Sigma (\u03a3).";
sw.Write(message);
sw.Flush();
fs.CopyTo(ms);
return ms.ToArray();
}
}
}
字符串消息未保存到 test.csv 文件。有人知道为什么吗?
将文本写入内存流。
byte[] bytes = null;
using (var ms = new MemoryStream())
{
using(TextWriter tw = new StreamWriter(ms)){
tw.Write("blabla");
tw.Flush();
ms.Position = 0;
bytes = ms.ToArray();
}
}
更新
直接使用文件流并写入文件
using (var fs = new FileStream(@"C:\ed\test.csv", FileMode.Create, FileAccess.ReadWrite))
{
using (TextWriter tw = new StreamWriter(fs))
{
tw.Write("blabla");
tw.Flush();
}
}
您可以使用编码从字符串中获取字节数组:
Encoding.ASCII.GetBytes(aString);
或者
Encoding.UTF8.GetBytes(aString);
但我不知道您为什么需要字节形式的 csv。您可以将整个文件加载到一个字符串中,添加到它然后保存它:
string content;
using (var reader = new StreamReader(filename))
{
content = reader.ReadToEnd();
}
content += "x,y,z";
using (var writer = new StreamWriter(filename))
{
writer.Write(content);
}
更新:在内存中创建一个 csv 并作为字节传回:
var stringBuilder = new StringBuilder();
foreach(var line in GetLines())
{
stringBuilder.AppendLine(line);
}
return Encoding.ASCII.GetBytes(stringBuilder.ToString());
如何使用正确的方法创建 .csv 文件implicitly/automatically,将文本添加到内存中的该文件,然后将内存中的数据转换为字节数组?
string path = @"C:\test.txt";
File.WriteAllLines(path, GetLines());
byte[] bytes = System.IO.File.ReadAllBytes(path);
用这种方法我总是创建一个文件(好),写入它(好)然后关闭它(坏)然后从一个路径再次打开文件并从硬盘读取它(坏)
我该如何改进?
更新
一个几乎不错的方法是:
using (var fs = new FileStream(@"C:\test.csv", FileMode.Create, FileAccess.ReadWrite))
{
using (var memoryStream = new MemoryStream())
{
fs.CopyTo(memoryStream );
return memoryStream .ToArray();
}
}
但我无法将文本写入该文件流...只是字节...
更新 2
using (var fs = File.Create(@"C:\temp\test.csv"))
{
using (var sw = new StreamWriter(fs, Encoding.Default))
{
using (var ms = new MemoryStream())
{
String message = "Message is the correct ääüö Pi(\u03a0), and Sigma (\u03a3).";
sw.Write(message);
sw.Flush();
fs.CopyTo(ms);
return ms.ToArray();
}
}
}
字符串消息未保存到 test.csv 文件。有人知道为什么吗?
将文本写入内存流。
byte[] bytes = null;
using (var ms = new MemoryStream())
{
using(TextWriter tw = new StreamWriter(ms)){
tw.Write("blabla");
tw.Flush();
ms.Position = 0;
bytes = ms.ToArray();
}
}
更新
直接使用文件流并写入文件
using (var fs = new FileStream(@"C:\ed\test.csv", FileMode.Create, FileAccess.ReadWrite))
{
using (TextWriter tw = new StreamWriter(fs))
{
tw.Write("blabla");
tw.Flush();
}
}
您可以使用编码从字符串中获取字节数组:
Encoding.ASCII.GetBytes(aString);
或者
Encoding.UTF8.GetBytes(aString);
但我不知道您为什么需要字节形式的 csv。您可以将整个文件加载到一个字符串中,添加到它然后保存它:
string content;
using (var reader = new StreamReader(filename))
{
content = reader.ReadToEnd();
}
content += "x,y,z";
using (var writer = new StreamWriter(filename))
{
writer.Write(content);
}
更新:在内存中创建一个 csv 并作为字节传回:
var stringBuilder = new StringBuilder();
foreach(var line in GetLines())
{
stringBuilder.AppendLine(line);
}
return Encoding.ASCII.GetBytes(stringBuilder.ToString());