Path.GetRandomFileName vs Path.GetTempFileName

时间:2017-03-29 15:51:35

标签: c#

根据https://msdn.microsoft.com/en-us/library/system.io.path.getrandomfilename(v=vs.110).aspx的建议 我已将GetTempFileName替换为GetRandomFileName以获取临时文件的名称。它会导致问题。有时GetRandomFileName不返回文件名,而是返回System32文件夹中的位置。并且导致没有管理员权限的用户遇到错误,即找不到该文件。 我错过了什么吗?

这是一段代码:

string tempFileName = Path.GetRandomFileName(); FileStream tempFileStream = null; tempFileStream = File.Open(tempFileName, FileMode.Create, FileAccess.ReadWrite);

稍后当我尝试通过代码访问该文件时:

FileInfo fileInfo = new FileInfo(tempFileName);

我有一个错误:

  

System.UnauthorizedAccessException:拒绝访问路径“C:\ Windows \ system32 \ 25ddubwt.qsc”。

我意识到当用户使用Windows / Start按钮启动程序时,应用程序的当前目录将是System32

1 个答案:

答案 0 :(得分:4)

GetTempFileName()返回完整路径,GetRandomFileName()没有。

如果您认为GetRandomFileName()有一个路径并写入该路径,那么该文件可能最终会出现在System32中(如果是当前目录)。

要修复创建完整路径:

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