Path.GetRandomFileName vs Path.GetTempFileName



基于 https://msdn.microsoft.com/en-us/library/system.io.path.getrandomfilename(v=vs.110(的建议.aspx我已将 GetTempFileName 替换为 GetRandomFileName 以获取临时文件的名称。它会导致一个问题。有时 GetRandom文件名返回的不是文件名,而是 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/开始按钮的菜单启动程序时,应用程序的当前目录将是System32

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

如果您假设GetRandomFileName()有一个路径并写入它,那么如果这是当前目录,则文件很可能最终出现在 System32 中。

要修复,请创建一个完整路径:

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

最新更新