0

我正在制作一个程序,它从互联网上下载照片并将其保存到一个名为“temp.jpg”的文件中。例如,我的程序用户BackgroundWorker和我有一个问题,我第二次运行BackgroundWorker我的程序尝试打开“temp.jpg”,但它仍然被第一个BackgroundWorker.

任何建议如何解决这个问题?

一个解决方案可能是通过时间戳或类似的东西来命名文件。

要将照片下载到我正在使用的 temp.jpg

WebClient webClient = new WebClient();
try
{
    webClient.DownloadFile(foto, path);
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
} 

问题是第一个正在使用“temp.jpg” BackgroundWorker

4

2 回答 2

0

文件访问是一个主要的瓶颈。时间戳不是一个奇怪的解决方案。

使用以下内容创建文件名:-

string outFile = 
  String.Format("temp_{0:dd}_{0:MMM}_{0:yyyy}_{0:hh}_{0:mm}_{0:ss}_{0:fff}.jpg",
    DateTime.Now);
于 2012-12-06T09:58:10.993 回答
0

编辑

WebClient.DownloadFile为您处理文件流的管理,因此,这不是您处理流对象或释放文件句柄的问题。

您需要确保每个并发调用WebClient.DownloadFile都使用唯一的文件名。

框架可以使用该Path.GetTemporaryFileName方法生成唯一的临时文件名。


您应该确保您正在关闭文件并在后台工作人员中释放句柄,这通常通过文件流using周围的块来实现。IDisposable

If you want to download files concurrently i.e. on multiple background workers at once, then each worker will need a unique file name but, if this is a problem for a repeated run of a single background worker, unique names is not the right solution. Hiding the problem by using new unique filenames will just leak resources.

于 2012-12-06T10:00:10.490 回答