2017-03-29 49 views
3

基於來自https://msdn.microsoft.com/en-us/library/system.io.path.getrandomfilename(v=vs.110).aspx的推薦 我已將GetTempFileName替換爲GetRandomFileName以獲取臨時文件的名稱。它會導致一個問題。有時GetRandomFileName不會返回文件名,而是返回System32文件夾中的位置。導致沒有管理員權限的用戶遇到文件未找到的錯誤。 我錯過了什麼嗎?Path.GetRandomFileName vs Path.GetTempFileName

下面是一個代碼:

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

後來當我試圖通過代碼來訪問該文件:

FileInfo fileInfo = new FileInfo(tempFileName); 

我有一個錯誤:

System.UnauthorizedAccessException: Access to the path 'C:\Windows\system32\25ddubwt.qsc' is denied.

我意識到,當用戶通過使用菜單從Windows /開始啓動程序對於應用程序按鈕當前目錄將是System32下

+0

位置的任何示例返回文件名來代替? –

+0

這是一個C#小提琴,演示Alex K在說什麼。注意只打印一個隨機文件名:https://dotnetfiddle.net/dqKbUy此外,GetRandomFileName()不同時GetTempFileName創建一個零字節文件,並返回到它的完整路徑創建一個文件。 –

+0

我必須編輯我的問題。如果您通過在Windows上使用sortcut啓動您的exe,則開始按鈕菜單的當前目錄變爲System32。 – GenZiy

回答

2

GetTempFileName()返回一個完整的路徑,GetRandomFileName()沒有。

如果假定GetRandomFileName()具有路徑和寫入該文件可能在System32中結束了,如果這就是當前目錄。

要解決創建一個完整的路徑:

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

這將是一個合理的解釋。但它不是當前目錄。而且只有10-25%的時間發生。 – GenZiy

+1

一個將指向C:\東西\ TEMP \對方不會,那唯一的區別和其相當大的一個。其他的東西可能會改變目錄 - 這就是爲什麼你應該總是指定一個絕對路徑的地方。 –

+0

這是否意味着有時當前目錄可以是System32,有時不是?依靠什麼? – GenZiy

相關問題