Какова наилучшая практика для сохранения файла, загружаемого в MemoryStream (C #)?

2

Мне нужно временно сохранить загрузку файла в 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();
    }
Теги:
file-upload
memorystream

4 ответа

3
Лучший ответ

Если flUpload.FileBytes - массив байтов, вы можете использовать конструктор MemoryStream, который принимает содержащиеся в нем данные как параметр:

MemoryStream memStream = new MemoryStream(flUpload.FileBytes);

Если нет (если он просто реализует IEnumerable), вы можете преобразовать его в массив байтов с помощью Linq:

MemoryStream memStream = new MemoryStream(flUpload.FileBytes.ToArray());
  • 0
    Спасибо, я знал, что много работаю.
1
    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);
            }
        }
    }
0

Всего три строки.

if (flUpload.FileName.Length > 0)
{
   string directoryPath="C:\\SomeFolderName";
   flUpload.SaveAs(directoryPath + "\\" + fileUpload.FileName);
}
  • 0
    вопрос был для потока памяти, а не файла
0

Легче работать с строкой... все зависит от того, что вы собираетесь делать с ней, я думаю.

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");

Ещё вопросы

Сообщество Overcoder
Наверх
Меню