我有一个文件名指向一个文本文件,包括它的路径,作为一个字符串。现在我想将此.csv
文件加载到内存流中。我该怎么做?
例如,我有这个:
Dim filename as string="C:\Users\Desktop\abc.csv"
答案 0 :(得分:64)
Dim stream As New MemoryStream(File.ReadAllBytes(filename))
答案 1 :(得分:30)
您无需将文件加载到MemoryStream中。
您只需致电File.OpenRead
即可获得包含该文件的FileStream
。
如果您确实希望文件位于MemoryStream中,可以调用CopyTo
将FileStream复制到MemoryStream。
答案 2 :(得分:0)
我有一个使用旧的XmlReader API从磁盘读取的XML文件。如何将XML文件读取到内存中,然后在内存中使用它,而不是反复读取磁盘?基于Centro的VB答案(已批准),但带有Using块,并且使用C#。
关键所在:
MemoryStream myXMLDocument = new MemoryStream(File.ReadAllBytes(@"c:\temp\myDemoXMLDocument.xml"));
如果您想将CSV文件加载到MemoryStream中,请问OP的问题:
MemoryStream myCSVDataInMemory = new MemoryStream(File.ReadAllBytes(@"C:\Users\Desktop\abc.csv"));
以下是一个代码段,显示了现在位于MemoryStream中的要通过XML文档读取的代码。基本上与来自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();
}
}
答案 3 :(得分:-1)
您可以将其复制到文件流中,如下所示:
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();