2012-04-04 92 views
0

我使用的folderBrowseDialog讓用戶能夠選擇程序將保存一些文件的位置。有一個問題,用戶可以選擇應用程序無法操作的路徑,例如「c:\」(程序由用戶而非管理員啓動)C++ cli檢查文件是否可以在這裏創建,FolderBrowseDialog

我見過一些程序,建議我更改我的路徑到「我的文檔」,每當我嘗試選擇一條USER無法操作的路徑時,我無法弄清楚如何去做。 請注意,我使用的是folderBrowseDialog而不是savefiledialog。

所以我想也許我會彈出警告,使用FileIOPermission。但對於一些reasone它不起作用。這裏是我寫的一個快速代碼,但是這個例外永遠不會拋出。 FileIOPremission on MSDN

using namespace System::Security::Permissions; 

FileIOPermission^ f2 = gcnew FileIOPermission(FileIOPermissionAccess::Write,"C:\\"); 

try { 
    f2->Demand(); 
} 
catch (System::Security::SecurityException^ s){ 
    MessageBox::Show(s->Message); 
} 

回答

1

你是在錯誤的軌道與此有關。是的,一個FileIOPermission不會做你希望它做的事,那是一個安全相關的類,允許你編寫在沙箱中運行的代碼。就像在瀏覽器中運行的代碼一樣,停止將文件散佈在用戶磁盤上。或者閱讀敏感文件。這在vanilla C++/CLI應用程序中不起作用,它以完全信任的方式運行,使用戶可以訪問她通常訪問的所有目錄和文件,而無需添加其他限制。你沒有理由添加額外的。

將文件寫入磁盤通常是危險的操作。很多事情可能會出錯。您正在使用許多其他正在訪問文件的進程的操作系統上運行代碼。試圖覆蓋其他進程正在讀取的文件將導致異常。該磁盤可能會填滿。用戶可能輸入了她無權訪問的目錄名稱,這只是另一種失敗模式。只要趕上IOException並告訴用戶它。

當然,從受限用戶非常熟悉的目錄開始對話。她的文檔文件夾是她的「家」目錄。如果您不清楚要轉儲選定目錄中的大量文件,請在目錄中看到任何其他文件時顯示溫和的提示。避免「Eek,你做了什麼!」當她發現這裏的Documents目錄突然有更多的文件。前幾次。當你可以給它一個描述性的名字時,不要猶豫,創建你自己的子文件夾,這樣不會發生。有些日期/時間的名稱通常有效。

+0

那麼,你的答案不是很有幫助。我只是試圖創建一個簡單的程序,節省了一個屏幕拍攝。我問如何檢查我是否有權在此文件夾中寫入或不寫入。 – 2012-04-05 13:22:56

+0

嗯,我回答說。捕獲IOException。使用DirectoryInfo :: GetAccessControl()可以使它變得更加複雜。這增加了很多代碼,但並沒有阻止你必須捕捉異常,因爲其他原因你無法檢查。您需要編寫該代碼才能理解答案的有用性。 – 2012-04-05 13:28:52

相關問題