Мне нужно временно сохранить загрузку файла в MemoryStream.
Каким будет лучший способ сделать это с помощью asp.net(3.5)?
Вот что я до сих пор. Он работает (локально проверен), но он не выглядит правильным для меня.
protected void lnkUploadFile_Click(object sender, EventArgs e)
{
MemoryStream memStream = new MemoryStream();
BinaryWriter sWriter = new BinaryWriter(memStream);
foreach (byte b in flUpload.FileBytes)
{
sWriter.Write(b);
}
sWriter.Flush();
// writing to file to verify file stream converted correctly
FileStream fstream = new FileStream(@"C:/test/" + flUpload.FileName, FileMode.Create);
memStream.WriteTo(fstream);
fstream.Dispose();
memStream.Dispose();
}
Если flUpload.FileBytes
- массив байтов, вы можете использовать конструктор MemoryStream, который принимает содержащиеся в нем данные как параметр:
MemoryStream memStream = new MemoryStream(flUpload.FileBytes);
Если нет (если он просто реализует IEnumerable), вы можете преобразовать его в массив байтов с помощью Linq:
MemoryStream memStream = new MemoryStream(flUpload.FileBytes.ToArray());
protected void lnkUploadFile_Click(object sender, EventArgs e)
{
using (MemoryStream memStream = new MemoryStream(flUpload.FileBytes))
{
using (FileStream fstream = new FileStream(@"C:/test/" +
flUpload.FileName, FileMode.Create))
{
memStream.WriteTo(fstream);
}
}
}
Всего три строки.
if (flUpload.FileName.Length > 0)
{
string directoryPath="C:\\SomeFolderName";
flUpload.SaveAs(directoryPath + "\\" + fileUpload.FileName);
}
Легче работать с строкой... все зависит от того, что вы собираетесь делать с ней, я думаю.
System.IO.StreamReader reader = new System.IO.StreamReader("path");
string file = reader.ReadToEnd();
Или, если вам нужны байты, на самом деле есть программный snipet "filReadBin", который вы можете использовать, который производит это:
byte[] fileContents;
fileContents = System.IO.File.ReadAllBytes(@"C:\Test.txt");