2016-09-01 27 views
0

我搜索的所有類似的問題,但還是沒能解決問題出image.fromFile內存異常(流)

這是一個服務器的代碼是工作成功和圖像文件創建成功,但如果我無法訪問圖像文件

image i = Image.FromStream(StreamObject);

注: 1的圖像不是太大 2-圖像具有有效的圖像格式

我知道有關流問題...我怎樣才能控制這個問題 我想以檢索的由於某種原因在圖像對象中保存了圖像。 如何讓圖像的整個生命週期都保持打開狀態。

static void Main(string[] args) 
    { 
     IPAddress ipAdress = IPAddress.Parse("192.160.1.8"); 
     // Initializes the Listener 
     TcpListener tcpListener = new TcpListener(ipAdress, 8001); 
     tcpListener.Start(); 
     int no; 
     for (;;) 
     { 
      Socket socket = tcpListener.AcceptSocket(); 
      if (socket.Connected) 
      { 

       Stream os = File.OpenWrite("Target.jpg",); 
       byte[] buffer = new byte[8000000]; 
       NetworkStream networkStream = new NetworkStream(socket); 
       no = networkStream.Read(buffer, 0, 8000000); 
       os.Write(buffer, 0, no); 
       ///here the problem in the following line 
       /// 
        Image i = Image.FromFile("Target.jpg"); 
       /// 
       networkStream.Close(); 
       socket.Close(); 
       break; 

      } 
     } 

    } 

回答

1

雖然字節已寫入緩衝區,但字節可能未刷新到磁盤。此外,所提供的代碼示例在文件讀取到圖像時保持打開文件。對於像stream這樣的東西,你應該將這個用法包含在using聲明中以避免這些類型的內存錯誤。

static void Main(string[] args) 
{ 
    IPAddress ipAdress = IPAddress.Parse("192.160.1.8"); 
    // Initializes the Listener 
    TcpListener tcpListener = new TcpListener(ipAdress, 8001); 
    tcpListener.Start(); 
    int no; 
    for (;;) 
    { 
     Socket socket = tcpListener.AcceptSocket(); 
     if (socket.Connected) 
     { 
      byte[] buffer = new byte[8000000]; 
      using (Stream os = File.OpenWrite("Target.jpg")) 
      { 
       using (NetworkStream networkStream = new NetworkStream(socket)) 
       { 
        no = networkStream.Read(buffer, 0, 8000000); 
        os.Write(buffer, 0, no); 
       } 
      } 


      ///here the problem in the following line 
      /// 
       Image i = Image.FromFile("Target.jpg"); 
      /// 

      socket.Close(); 
      break; 

     } 
    } 

} 

或者,也可能更恰當,你應該考慮直接使用Image.FromStream流創建GDI +圖片。 Image.FromStream方法記錄在這裏:https://msdn.microsoft.com/en-us/library/system.drawing.image.fromstream%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

+0

非常感謝你:) :) –

+0

我使用FromFile(),因爲FromStream生成更多的錯誤.. –