C# 将字节[]解析为文件而不保存它

C# 将字节[]解析为文件而不保存它,c#,.net,C#,.net,我正在查询一个web服务外部系统,该系统返回一个字节[]。这个字节[]是一个csv文件,我将字节[]作为csv保存到临时位置,然后将csv文件解析到数据库中 是否可以直接读取字节[],而不是将文件保存到临时位置,将其存储在内存中并将文件内容解析到数据库 我看了看,不确定现在情况是否发生了变化?如有任何意见,将不胜感激 您可以使用MemoryStream类而不是FileStream: 您可以使用MemoryStream类而不是FileStream: 您链接到的相关问题是关于在Word中加载它。这与

我正在查询一个web服务外部系统,该系统返回一个字节[]。这个字节[]是一个csv文件,我将字节[]作为csv保存到临时位置,然后将csv文件解析到数据库中

是否可以直接读取字节[],而不是将文件保存到临时位置,将其存储在内存中并将文件内容解析到数据库

我看了看,不确定现在情况是否发生了变化?如有任何意见,将不胜感激

您可以使用MemoryStream类而不是FileStream:

您可以使用MemoryStream类而不是FileStream:


您链接到的相关问题是关于在Word中加载它。这与仅在本地解析它是非常不同的。在这种情况下,只需将其连接到MemoryStream并执行以下操作:

using(var ms = new MemoryStream(theData))
using(var sr = new StreamReader(ms))
using(var reader = new CsvReader(sr)) {
    // read the data...
}

您链接到的相关问题是关于在Word中加载它。这与仅在本地解析它是非常不同的。在这种情况下,只需将其连接到MemoryStream并执行以下操作:

using(var ms = new MemoryStream(theData))
using(var sr = new StreamReader(ms))
using(var reader = new CsvReader(sr)) {
    // read the data...
}

对此不完全确定,因为在另一端,对象应该按照相同的逻辑序列化,但您可以尝试一下:

MemoryStream memoryStream = new MemoryStream();
BinaryFormatter binaryFormatter = new BinaryFormatter();
memoryStream.Write(serializedInstance, 0, serializedInstance.Length);
memoryStream.Seek(0, SeekOrigin.Begin);
string deserializedInstance = (string)binaryFormatter.Deserialize(memoryStream);

对此不完全确定,因为在另一端,对象应该按照相同的逻辑序列化,但您可以尝试一下:

MemoryStream memoryStream = new MemoryStream();
BinaryFormatter binaryFormatter = new BinaryFormatter();
memoryStream.Write(serializedInstance, 0, serializedInstance.Length);
memoryStream.Seek(0, SeekOrigin.Begin);
string deserializedInstance = (string)binaryFormatter.Deserialize(memoryStream);

不太容易找到,但标准中有一个CSV解析器

    public void HandleMycontent(byte[] content)
    {
        using (var stream = new System.IO.MemoryStream(content))
        {
            using (var reader = new StreamReader(stream))
            {
                using (var parser = new Microsoft.VisualBasic.FileIO.TextFieldParser(reader))
                {
                    //parse my csv here
                }
            }
        }
    }

不太容易找到,但标准中有一个CSV解析器

    public void HandleMycontent(byte[] content)
    {
        using (var stream = new System.IO.MemoryStream(content))
        {
            using (var reader = new StreamReader(stream))
            {
                using (var parser = new Microsoft.VisualBasic.FileIO.TextFieldParser(reader))
                {
                    //parse my csv here
                }
            }
        }
    }


是否要将字节[]转换为字符串?如果是这样,您可以只调用Encoding.UTF8.GetStringbytes-如果文件是UTF8编码的,那么您想将字节[]转换为字符串吗?如果是这样,您可以只调用Encoding.UTF8.GetStringbytes-如果文件是UTF8编码的,我可能希望它至少包装在StreamReader中,以便用ReadLine解析CSV。@GrantThomas CSV从技术上讲比换行更微妙;我会建议一个专门的CSV解析器…@MarcGravell当然,我同意;我只是强调这个答案只会给OP带来不同的字节管理方式,对完成最终结果没有实际价值。即使给出几行文字也会是一项更大的成就…@GrantThomas:据我所知,他已经准备好了阅读文件的一切。我假设代码在流上运行。在这种情况下,他可以简单地将内存流放到他以前拥有文件流的地方。无论他是否包装,在这两种情况下都是一样的,这就是为什么我选择了它。我不同意你的结论,即这个答案对他没有帮助。@DanielHilgarth说这个答案对OP毫无帮助,这可能是言过其实了。我想这是一种我们对问题看法不同的情况;我没有像你那样读它。可能希望它至少包装在一个StreamReader中,以便用ReadLine解析CSV。@GrantThomas CSV在技术上比换行更微妙;我会建议一个专门的CSV解析器…@MarcGravell当然,我同意;我只是强调这个答案只会给OP带来不同的字节管理方式,对完成最终结果没有实际价值。即使给出几行文字也会是一项更大的成就…@GrantThomas:据我所知,他已经准备好了阅读文件的一切。我假设代码在流上运行。在这种情况下,他可以简单地将内存流放到他以前拥有文件流的地方。无论他是否包装,在这两种情况下都是一样的,这就是为什么我选择了它。我不同意你的结论,即这个答案对他没有帮助。@DanielHilgarth说这个答案对OP毫无帮助,这可能是言过其实了。我想这是一种我们对问题看法不同的情况;我没有像你那样阅读它。public CsvReaderSystem.IO.TextReader reader,bool hasHeaders LumenWorks.Framework.IO.Csv.CsvReader摘要:初始化CsvReader类的新实例。参数:reader:指向CSV文件的文本阅读器。HashHeaders:如果字段名位于第一个未注释行上,则为true,否则为false。异常:ArgumentNullException:读取器为空。ArgumentException:无法从reader.public CsvReaderSystem.IO.TextReader读取,LumenWorks.Framework.IO.Csv.CsvReader的bool hasHeaders成员摘要:初始化CsvReader类的新实例。参数:reader:指向CSV文件的文本阅读器。HashHeaders:如果字段名位于第一个未注释行上,则为true,否则为false。异常:ArgumentNullException:读取器为空。ArgumentException:无法从读取器读取。Microsoft.Csharp中是否没有与Microsoft.VisualBasic.FileIO.TextFieldParser相等的内容?或者我真的必须使用VisualBasic的引用吗?恐怕你需要使用VisualBasic的引用,我同意它的位置有点奇怪,但它仍然是框架的一部分。在Microsoft.Csh中没有任何东西可以与Microsoft.VisualBasic.FileIO.TextFieldParser等同吗
arp?或者我真的需要引用VisualBasic?恐怕你需要引用VisualBasic,我同意它的位置有点奇怪,但它仍然是框架的一部分。