簡體   English   中英

保存圖像時在C#緊湊框架中的IOEXCEPTION

[英]IOEXCEPTION in C# compact framework when saving image

我正在從網絡請求中保存圖片,並且確實發生了一些奇怪的事情。 在我下載的8,000張圖像中,大約有一半出現IOEXCEPTION錯誤:ERROR_ACCESS_DENIED(5)INVALID_PARAMETER(87)

使用file.open保存文件之前,請檢查以確保該文件不存在。 此行代碼拋出異常:

fileStream = File.Open(目的地,FileMode.Create,FileAccess.Write,FileShare.None);

下面是代碼:

公共靜態布爾DownloadFile(string url,字符串目標){bool success = false;

        System.Net.HttpWebRequest request = null;
        System.Net.WebResponse response = null;
        Stream responseStream = null;
        FileStream fileStream = null;

        try
        {
            request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
            request.Method = "GET";
            request.Timeout = 100000; // 100 seconds
            request.Proxy = System.Net.GlobalProxySelection.GetEmptyWebProxy();
            response = request.GetResponse();

            responseStream = response.GetResponseStream();
            fileStream = File.Open(destination, FileMode.Create, FileAccess.Write, FileShare.None);
            //fileStream = File.Create(destination);


            // read up to ten kilobytes at a time
            int maxRead = 10240;
            byte[] buffer = new byte[maxRead];
            int bytesRead = 0;
            int totalBytesRead = 0;

            // loop until no data is returned
            while ((bytesRead = responseStream.Read(buffer, 0, maxRead)) > 0)
            {
                totalBytesRead += bytesRead;
                fileStream.Write(buffer, 0, bytesRead);
            }

            // we got to this point with no exception. Ok.
            success = true;
        }
        catch (System.Net.WebException we)
        {
            // something went terribly wrong.
            success = false;
            //MessageBox.Show(exp.ToString());
            writeErrFile(we.ToString(), url);
            //Debug.WriteLine(exp);
        }
        catch (System.IO.IOException ie)
        {
            // something went terribly wrong.
            success = false;
            //MessageBox.Show(ie.InnerException.ToString());
            writeErrFile(ie.ToString(), destination + " -- " + url);
            //Debug.WriteLine(exp);
        }
        catch (Exception exp)
        {
            // something went terribly wrong.
            success = false;
            //MessageBox.Show(exp.ToString());
            writeErrFile(exp.ToString(), destination + " -- " + url);
            //Debug.WriteLine(exp);
        }
        finally
        {
            // cleanup all potentially open streams.

            if (null != responseStream)
                responseStream.Close();
            if (null != response)
                response.Close();
            if (null != fileStream)
                fileStream.Close();

        }

        // if part of the file was written and the transfer failed, delete the partial file
        if (!success && File.Exists(destination))
            File.Delete(destination);

        return success;
    }

我已經堅持了幾天。 任何幫助將以難以想象的數量級被贊賞。

使用file.exists()檢查文件是否存在,並使用file.create或file.openwrite寫入文件。

從您的代碼中,我看不到您如何檢查文件是否存在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM