0

このプログラムで奇妙なエラーが発生しました。インターネットから写真をダウンロードし、それを.jpegに変換してから、最初の写真(.png)を削除します。しかし、エラーが発生しました。ファイルが別のプロセスで使用されています。なぜこれが起こっているのですか?私はファイルを開かず、誰もそれを使用していません。

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

2 に答える 2

4

FromFileはファイルを開いたままにしているので、次のようなものを使用する必要があります。

// Load image
FileStream filestream;
filestream = new FileStream("Filename",FileMode.Open, FileAccess.Read);
currentImage = System.Drawing.Image.FromStream(filestream);
filestream.Close();
于 2012-12-11T11:10:01.363 に答える
0

system.Drawing.Imageはファイルを保持しています。image1をusingステートメントでラップするだけです。

        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);
            }
        }
于 2012-12-11T11:21:04.587 に答える