2011-08-01 19 views
0

ファイルをアップロードするときに、一時ファイルに変換して一時フォルダに格納し、一時ファイルを読み込んで画像の高さ幅を確認し、後でdatabseに格納する必要があります私は画像として一時ファイルを読むときにエラーが発生します。メモリ不足のため、以下は私のコード全体です。ファイルの処理#

string img = System.Windows.Forms.Application.StartupPath [email protected]"\"+ path; 
//in path .png file is accessed. 
      string filename = Path.GetFileName(img); 
      string internetCache = Environment.GetFolderPath(Environment.SpecialFolder.InternetCache); 
      string [email protected]"\tmp"; 
      if (!Directory.Exists(IEPath)) 
       Directory.CreateDirectory(IEPath); 


      FileInfo fi = new FileInfo(img); 
      FileStream fs = fi.OpenRead(); 
      //lResult = URLDownloadToFile(0, img.src, TempFolder & strFileName, 0, 0) 
      Stream stream = fs; 
      byte[] buffer = new byte[fs.Length]; 
      stream.Seek(273, SeekOrigin.Begin); 
      stream.Read(buffer, 0, (int)buffer.Length); 

      string tempfile = Path.Combine(IEPath, Math.Abs(filename.GetHashCode()) + ".tmp"); 
      File.WriteAllBytes(tempfile, buffer); 
      fs.Close(); 
      stream.Close(); 

      string _contentType = "application/octet-stream"; 
      FileType Type = FileType.png; 
      string MimeType = "image/png"; 
      FileStream fst = new FileStream(tempfile, FileMode.Open); 
      Image _image = System.Drawing.Image.FromStream(fst, true, true); 

例外がメモリ不足になっている最後の行。 解決策を見つけるのを手伝ってください。

+1

なぜ最初の273バイトをスキップしていますか? – spender

+0

ファイルを保存して、保存したファイルを開いてデータが正しいことを確認しましたか? –

+0

私はちょうどテストのために与えました。私はファイルを開こうとしませんでした。 – user703526

答えて

0

  1. ファイルをコピーし、いくつかのファイルを読み込む一時ファイルへ
  2. 読む画像
  3. としては、幅&高さに

    var bytes = File.ReadAllBytes(@"C:\temp\duck.jpg"); 
    var temp = Path.GetTempFileName(); 
    File.WriteAllBytes(temp, bytes); 
    
    var img = Image.FromFile(temp); 
    Console.WriteLine ("width: {0}, height: {0}", img.Width, img.Height); 
    
    を取得します
2

私はあなたが読んでいるストリームが壊れていることを確信しています(おそらく先頭の273バイトを削除したためです)。私は質問の指示に従っ