views:

307

answers:

3

I need to temporary store a file upload to a MemoryStream.

What would be the best method to do this using asp.net (3.5)?

Here's what I have so far. It works (locally tested), but it does not look right to me.

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();
 }
+1  A: 

If flUpload.FileBytes is a byte array, you can use the MemoryStream constructor that accepts the contained data as a parameter:

MemoryStream memStream = new MemoryStream(flUpload.FileBytes);

If not (if it just implements IEnumerable), you can convert it to a byte array using Linq:

MemoryStream memStream = new MemoryStream(flUpload.FileBytes.ToArray());
Konamiman
Thanks, I knew I was doing to much work.
Kenneth J
A: 

Might be easier to work with as a string... all depends on what you're going to do with it I guess.

System.IO.StreamReader reader = new System.IO.StreamReader("path");
string file = reader.ReadToEnd();

Or if you need the bytes there is actually a code snipet "filReadBin" you can use that produces this:

byte[] fileContents;
fileContents = System.IO.File.ReadAllBytes(@"C:\Test.txt");
J.13.L
+1  A: 
    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);
            }
        }
    }
andyp