2013-01-07 34 views
4
WebClient webClient = new WebClient(); 
string mapPathName = Server.MapPath("\\images\\temp.jpg"); 
Uri uri = new Uri(mapLink); 
webClient.DownloadFile(uri, mapPathName); 
webClient.Dispose(); 
if (File.Exists(mapPathName)) 
    File.Delete(mapPathName); 

我用上面的代碼下載從谷歌地圖的加密圖像,但它已完成下載後,因爲它是我無法刪除該文件用過的。 任何人都可以幫我解決這個問題嗎?File.Delete(mapPathName)不工作的文件正在使用

ahhhhhhhhhhhhhhh。非常抱歉,你們,我的錯誤。上面的代碼工作,但當我試圖繪製之前刪除,這一次它不起作用。 > _ < 這裏是代碼:

PdfDocument document = new PdfDocument(); 
document.PageLayout = PdfPageLayout.SinglePage; 
document.Info.Title = "Created with PDFsharp"; 

// Create an empty page 
PdfPage page = document.AddPage(); 

// set size 
page.Size = PageSize.A4; 

// Get an XGraphics object for drawing 
XGraphics gfx = XGraphics.FromPdfPage(page); 

WebClient webClient = new WebClient(); 
string mapPathName = Server.MapPath("\\images\\temp.jpg"); 
Uri uri = new Uri(mapLink); 
webClient.DownloadFile(uri, mapPathName); 

// defind position to draw the image 
XRect rcImage = new XRect(x + 30, y, 410, 300); 

// draw the image 
gfx.DrawRectangle(XBrushes.Snow, rcImage); 
gfx.DrawImage(XImage.FromFile(Server.MapPath("\\images\\temp.jpg")), rcImage); 

// save pdf file 
string filename = "_HelloWorld.pdf"; 
string filePath = Server.MapPath(filename); 
if (File.Exists(filePath)) 
    File.Delete(filePath); 

document.Save(Server.MapPath(filename)); 

gfx.Dispose(); 
page.Close(); 
document.Dispose(); 

if (File.Exists(mapPathName)) 
    File.Delete(mapPathName); 
+1

這是設計。如果你想刪除一個文件,請停止使用它。 –

+1

@JonathanWood - 在上面的代碼中使用了哪裏? –

+2

你爲什麼要下載並立即刪除它?這是測試代碼嗎? –

回答

2

是否有你調用Dispose一個特別的原因?這可能是原因。如果您堅持使用dispose,請在調用dispose之前嘗試刪除它。例如 。 。 。

webClient.DownloadFileCompleted += (o, s) => 
{ 
    //if (File.Exists(mapPathName)) discard, see Paolo's comments below . . . 
     File.Delete(mapPathName); 
}; 
webClient.DownloadFileAsync(uri, mapPathName); 
webClient.Dispose(); 

您是否還考慮過using條款?這通常可以防止發生這些類型的錯誤。

+0

只有在使用異步'DownloadFileAsync'方法時纔會調用'DownloadFileCompleted'事件 – Flagbug

+0

也許你得到錯誤,因爲它仍然在下載並且你試圖刪除它? – rbtLong

+0

'DownloadFile'方法是一個同步的阻塞操作。方法結束後,文件仍然沒有下載。 – Flagbug

0

我解決了我的問題。 insteading使用

gfx.DrawImage(XImage.FromFile(Server.MapPath("\\images\\temp.jpg")), rcImage); 

我把它分成兩行

var img = XImage.FromFile(Server.MapPath("\\images\\temp.jpg")); 
gfx.DrawImage(img, rcImage); 

然後

img.Dispose; 

然後我可以刪除圖像:d謝謝大家。

相關問題