【发布时间】:2011-09-07 00:36:12
【问题描述】:
我有一个指向文本文件的文件名,包括它的路径,作为一个字符串。现在我想将这个.csv 文件加载到内存流中。我该怎么做?
例如,我有这个:
Dim filename as string="C:\Users\Desktop\abc.csv"
【问题讨论】:
我有一个指向文本文件的文件名,包括它的路径,作为一个字符串。现在我想将这个.csv 文件加载到内存流中。我该怎么做?
例如,我有这个:
Dim filename as string="C:\Users\Desktop\abc.csv"
【问题讨论】:
Dim stream As New MemoryStream(File.ReadAllBytes(filename))
【讨论】:
您不需要将文件加载到 MemoryStream 中。
您可以简单地调用File.OpenRead 来获取包含该文件的FileStream。
如果您确实希望文件在 MemoryStream 中,可以调用 CopyTo 将 FileStream 复制到 MemoryStream 中。
【讨论】:
Open 而不是OpenRead。然后,您可以写入和读取相同的流。
我使用旧的 XmlReader API 从磁盘读取了一个 XML 文件。如何将 XML 文件读入内存,然后在内存中使用,而不是重复读取磁盘?基于 Centro 的 VB 答案(已投票),但带有 Using 块,并且在 C# 中。
关键线:
MemoryStream myXMLDocument = new MemoryStream(File.ReadAllBytes(@"c:\temp\myDemoXMLDocument.xml"));
关于 OP 的问题,如果您想将 CSV 文件加载到 MemoryStream 中:
MemoryStream myCSVDataInMemory = new MemoryStream(File.ReadAllBytes(@"C:\Users\Desktop\abc.csv"));
下面的代码 sn-p 显示了读取 XML 文档的代码,因为它位于 MemoryStream 中。基本上与来自指向磁盘上文件的 FileStream 时的代码相同。是的,XMLTextReader API 既旧又笨重,但这是我在这个应用程序中必须使用的。
string myXMLFileName = @"c:\temp\myDemoXMLDocument.xml";
using (MemoryStream myXMLDocument = new MemoryStream(File.ReadAllBytes(myXMLFileName)))
{
myXMLTextReader = new XmlTextReader(myXMLDocument);
myXMLTextReader.WhitespaceHandling = WhitespaceHandling.None;
myXmlTextReader.Read(); // read the XML declaration node, advance to <Batch> tag
while (!myXmlTextReader.EOF)
{
if (myXmlTextReader.Name == "xml" && !myXmlTextReader.IsStartElement()) break;
// advance to <Batch> tag
while (myXmlTextReader.Name == "Batch" && myXmlTextReader.IsStartElement())
{
string BatchIdentifier = myXmlTextReader.GetAttribute("BatchIdentifier");
myXmlTextReader.Read(); // advance to next tag
while (!myXmlTextReader.EOF)
{
if (myXmlTextReader.Name == "Transaction" && myXmlTextReader.IsStartElement())
{
// Start a new set of items
string transactionID = myXmlTextReader.GetAttribute("ID");
myXmlTextReader.Read(); // Read next element, possibly another Transaction tag
}
}
//All Batch tags are completed.Move to next tag
myXmlTextReader.Read();
}
// Close the XML memory stream.
myXmlTextReader.Close();
myXmlDocument.Close();
}
}
【讨论】:
您可以像这样将其复制到文件流中:
string fullPath = Path.Combine(filePath, fileName);
FileStream fileStream = new FileStream(fullPath, FileMode.Open);
Image image = Image.FromStream(fileStream);
MemoryStream memoryStream = new MemoryStream();
image.Save(memoryStream, ImageFormat.Jpeg);
//Close File Stream
fileStream.Close();
【讨论】: