2012-12-11 57 views
0

我得到了這個程序的一個奇怪的錯誤,它從互聯網上下載一張照片,然後我將它轉換爲.jpeg,然後刪除第一張照片(在.png中)。 但我得到一個錯誤:文件正在被另一個進程使用。爲什麼發生這種情況?我沒有打開文件,也沒有人使用它。正在使用的文件(沒有打開它)c#

string outFile; 
outFile = Path.GetTempFileName(); 
try 
{ 
    webClient.DownloadFile(foto, outFile); 
    if (foto.Substring(foto.Length - 3) == "png") 
    { 
     System.Drawing.Image image1 = System.Drawing.Image.FromFile(outFile); 
     foto = foto.Remove(foto.Length - 3) + "jpg"; 
     string outFile2 = Path.GetTempFileName(); 
     image1.Save(outFile2, System.Drawing.Imaging.ImageFormat.Jpeg); 
     System.IO.File.Delete(outFile);      
     outFile = outFile2; 
    } 
} 

回答

4

FROMFILE是保持文件打開,你必須使用這樣的事情:

// Load image 
FileStream filestream; 
filestream = new FileStream("Filename",FileMode.Open, FileAccess.Read); 
currentImage = System.Drawing.Image.FromStream(filestream); 
filestream.Close(); 
+1

+1 - 從[FromFile文檔](http://msdn.microsoft.com/en-us/library/4sahykhd.aspx) - 「文件保持鎖定狀態,直到圖像被丟棄。」 – stuartd

+0

是的,現在它工作正常。謝謝 –

0

的System.Drawing.Image對象持有到文件,只是包裹在此搜索一使用聲明。

 string foto = "http://icons.iconarchive.com/icons/mazenl77/I-like-buttons/64/Style-Config-icon.png"; 
     string outFile = Path.GetTempFileName(); 
     WebClient webClient = new WebClient(); 
     try 
     { 
      webClient.DownloadFile(foto, outFile); 
      if (Path.GetExtension(foto).ToUpper() == ".PNG") 
      { 
       string outFile2 = Path.GetTempFileName(); 
       using (System.Drawing.Image image1 = System.Drawing.Image.FromFile(outFile)) 
       { 
        image1.Save(outFile2, System.Drawing.Imaging.ImageFormat.Jpeg); 
       } 
       System.IO.File.Delete(outFile); 
      } 
     }