2011-06-07 233 views
4

對於我的WPF應用程序,我必須創建具有圖像文件的文件夾,例如:C:\ Pearl \ Src \ TEMP。稍後,當這些文件不需要時,我將以編程方式刪除這些文件夾。但我得到「進入路徑」被拒絕「。我也嘗試爲創建的臨時文件夾分配訪問權限,但沒有多大用處。訪問路徑被拒絕

using System.IO; 

var activeDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 

var dInfo = Directory.GetParent(Path.GetDirectoryName(activeDir); 

var dSecurity = dInfo.GetAccessControl(); 

dSecurity.AddAccessRule(new FileSystemAccessRule(@"ATSDEV\ABCD", FileSystemRights.DeleteSubdirectoriesAndFiles, AccessControlType.Allow)); 

dInfo.SetAccessControl(dSecurity); // Set the new access settings. 

var ImageDir = Path.Combine(dInfo.ToString(), "TEMP"); 

System.IO.Directory.CreateDirectory(ImageDir, dSecurity); 
+0

你能後拋出異常的確切的行? 似乎錯誤是你得到路徑名的方式 – LoSciamano 2011-06-07 16:16:40

+0

你確定你還沒有任何句柄(文件)仍然打開嗎? – Polyfun 2011-06-07 16:19:50

+4

它被稱爲** [UAC](http://stackoverflow.com/questions/5210575/does-windows-7-have-the-same-problem-as-vista/5210642#5210642)**。你根本不應該寫這個目錄。幸運的是,還有其他選擇。 – 2011-06-07 16:23:09

回答

8

在Vista +中,您不應該寫入正在執行的進程的安裝文件夾或父文件夾。相反,您應該考慮寫入用戶的AppData文件夾中的子目錄,因爲這會更合適,並且不會導致權限問題。

您可以通過Environment.GetFolderPathEnvironment.SpecialFolder.ApplicationData)獲取相應的文件夾。

+0

感謝您的回覆。我有Windows XP。我仍然嘗試了上面的appdata文件夾。它仍然是一樣的。現在的路徑是C:\ Documents and settings \ UserName \ Application Data \ 672011115302AM – user296623 2011-06-07 16:49:35

+0

@ user296623:是的,在XP中,最好也是這樣做。不過,在Vista +中,你將會遇到更多問題...... – 2011-06-07 16:51:01

+0

@ user296623:如果你不能刪除該文件夾,這可能意味着某個東西正在持有一個處理文件的內容。 – 2011-06-07 16:51:34

1

或者您可以使用Path.GetTempPath()獲取臨時目錄的路徑並在其中創建臨時數據。

使用Temp的好處是,如果您忘記了/無法清理它,當驅動器空間變慢時,系統可以幫助您清理它。

2

我也有這個問題,所以我在這篇文章中磕磕絆絆。我在複製/刪除之前和之後添加了以下代碼行。

刪除

File.SetAttributes(file, FileAttributes.Normal); 
File.Delete(file); 

複製

File.Copy(file, dest, true); 
File.SetAttributes(dest, FileAttributes.Normal);