2011-10-26 51 views
2

我需要将文件复制到tmp位置才能操作它。我需要确保我总是可以复制文件。将文件复制到tmp文件夹的建议方法是什么?

  • 以下代码是否正确?
  • 确保不会尝试复制到已存在的位置吗?
  • 有没有失败的机会? (我应该捕获任何异常)

,我现在用的就是下面的代码:

string tmpFile = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); 

在此先感谢。

+4

路径。GetTempFileName()我认为这就是你需要的全部 – jjchiw

+0

你可能想要改写你的问题,因为没有在你的代码中有一个复制操作,你只是想知道如何获取一个唯一的命名临时文件的文件名。 GetTempFileName是你需要的。 – Ernesto

+0

至于限制,有几点:如果GetTempFileName方法用于创建超过65535个文件而不删除以前的临时文件,GetTempFileName方法将引发IOException。 如果没有唯一的临时文件名可用,则GetTempFileName方法将引发IOException。要解决此错误,请删除所有不需要的临时文件。 – Ernesto

回答

3

也许用Path.GetTempFileName代替?

string tmpFile = Path.GetTempFileName(); 

该方法可能会抛出IOException,因此您应该在某个时候捕获该方法。究竟在哪里取决于这个代码存在的上下文。

请注意,此方法也会在磁盘上创建文件,因此不会有其他进程在此调用与代码写入文件之间创建相同名称的文件的风险。

1

出了什么问题:

string tmpFile = Path.GetTempFileName(); 

从MSDN上Path.GetTempFileName()

在磁盘上创建一个唯一命名的,零字节临时文件并返回 该文件的完整路径。该文件具有.TMP扩展名。

它并确保你没有得到一个已经存在,并就您的了解故障场景的问题一个文件,如果它不能创建一个这样的文件:

的GetTempFileName方法将引发IOException如果它用于 创建超过65535个文件而不删除以前的临时文件 。

如果没有唯一的临时文件名可用,则GetTempFileName方法将引发IOException。要解决此错误,请删除 所有不需要的临时文件。

2
  • 你的代码工作(尽管没有做你想做的,看下点)
  • 没有,GetRandomFileName行得检查名称的唯一,我会建议使用GetTempFileName()代替。
  • 您不必在此处查看,但是当您开始使用该文件(写入该文件)时可能会出现错误(例如,完整磁盘)。如果使用GetTempFileName(),则需要开始检查错误,因为它无法创建文件时会返回错误,或者没有可用的唯一名称。
相关问题