使用 .NET的IO(4)

獲得存儲區<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

存儲區公開數據艙中的虛文件系統。IsolatedStorageFile 提供了許多與存儲區進行交互的方法。要創建和檢索存儲區,IsolatedStorageFile 提供了三種靜態方法。調用 GetUserStoreForAssembly 或 GetUserStoreForDomain 分別返回按用戶和程序集隔離及按用戶、域和程序集隔離的存儲。這兩種方法檢索屬於代碼塊(是從該代碼塊中調用這兩種方法的)的存儲區。靜態方法 GetStore 返回獨立存儲區,該存儲區是通過傳入範圍參數組合指定的。下面的參數返回一個按用戶、程序集和域隔離的存儲區。

GetStore 方法可以用於指定存儲區應該和漫遊用戶配置文件一起漫遊。

默認情況下,從不同的程序集中獲得的獨立存儲區是不同的。您可以訪問不同程序集或域的存儲區,方法是傳入不同的程序集或域證據作爲 GetStore 方法的最後兩個參數。這需要訪問按應用程序域標識隔離的獨立存儲的權限。有關更多信息,請參閱 GetStore 方法。有關程序集的更多信息,請參閱程序集。

三種方法中的每種方法都返回 IsolatedStorageFile 對象。一旦具有了獨立存儲文件對象之後,您便可以使用獨立存儲方法來讀取、寫入、創建和刪除文件及文件目錄了。

沒有防止代碼向沒有足夠訪問權限來自己獲取存儲區的代碼傳遞 IsolatedStorageFile 的機制。只有當獲得對 IsolatedStorage 對象的引用時(通常是在 GetUserStoreForAssemblyGetUserStoreForDomain GetStore 方法中),才檢查域和程序集標識及獨立存儲權限。因此,使用這些引用的代碼應該保護對 IsolatedStorageFile 對象的引用。

ObtainingAStore 示例

下面的代碼示例是一個非常簡單的由類獲得按用戶和程序集隔離的存儲區的示例。通過向 GetStore 方法傳遞的參數添加 IsolatedStorageScope.Domain,此代碼可被更改用來檢索按用戶、域和程序集隔離的存儲區。

運行代碼之後,您可以通過在命令行鍵入 StoreAdm /LIST 來確認已創建了存儲區。這將運行獨立存儲管理工具 (Storeadm.exe) 並列出用戶當前所有的獨立存儲區。

枚舉存儲區

您可以使用 IsolatedStorageFile 靜態方法 GetEnumerator 枚舉當前用戶的所有獨立存儲區。GetEnumerator 取 IsolatedStorageScope 值並返回 IsolatedStorageFile 枚舉數。User 是唯一受支持的 IsolatedStorageScope 值。要枚舉存儲區,您必須具有指定 IsolatedStorageContainment 值 AdministerIsolatedStorageByUser的 IsolatedStorageFilePermission。當使用 IsolatedStorageScopeUser 進行調用時,GetEnumerator 返回爲當前用戶定義的 IsolatedStorageFiles 數組。

EnumeratingStores 示例

下面的代碼示例獲得按用戶和程序集隔離的存儲區並創建幾個文件。調用 GetEnumerator 方法並將結果放入 IEnumerator。然後代碼依次通過 IEnumerator,添加文件的大小,並將結果報告給控制檯。實際枚舉發生在私有 EnumerateTheStore 方法中,爲了清楚起見,將該方法與代碼的其他部分分開,放在文件的底部。

刪除存儲區

IsolatedStorageFile 提供了兩種刪除獨立存儲文件的方法:

  • 實例方法 Remove 不取任何參數,刪除調用它的存儲區。該操作不需要任何權限。可以訪問存儲區的任何代碼都可以刪除該存儲區中的任何數據或所有數據。

  • 靜態方法 Remove 採用 IsolatedStorageScope User,並刪除運行該代碼的用戶的所有存儲區。該操作需要 IsolatedStorageContainment AdministerIsolatedStorageByUser IsolatedStorageFilePermission 權限。

DeletingStores 示例

下面的代碼示例演示了靜態和實例 Remove 方法的使用。類獲得兩個存儲區,一個按用戶和程序集隔離;另一個按用戶、域和程序集隔離。通過調用 IsolatedStorageFile isoStore1Remove 方法刪除用戶、域和程序集存儲區。然後,通過調用靜態方法 IsolatedStorageFile.Remove 刪除該用戶所有剩餘的存儲區。

預見空間不足的情況

使用獨立存儲的代碼受配額的限制,該配額指定獨立存儲文件和目錄所在的數據艙的最大大小。該值由安全策略確定,管理員可以對其進行配置。如果試圖寫入數據時超過了所允許的最大大小,將引發 IsolatedStorageException,並使操作失敗。這有助於防止惡意的抵制服務攻擊,受到這種攻擊後會因爲數據存儲被填滿而導致應用程序拒絕請求。爲了幫助您確定給定的寫入嘗試是否會因爲此原因而失敗,獨立存儲提供了兩個只讀屬性:IsolatedStorage.CurrentSize 和 IsolatedStorage.MaximumSize。這兩個屬性可用於確定寫入存儲區是否將導致超過存儲區所允許的最大大小。當您使用這些屬性時,請記住獨立存儲可能被同時訪問;因此,如果您計算的存儲量有剩餘,則該存儲空間可能在您試圖寫入存儲區時已被使用。但是,這不會妨礙您使用存儲區的最大大小來確定是否將達到可用存儲的上限。

另一個重要的考慮是最大大小屬性取決於來自正常工作的程序集的證據。因此,只應該對使用 GetUserStoreForAssembly()、GetUserStoreForDomain() 或 GetStore() 創建的 IsolatedStorageFile 對象調用此方法。以其他任何方式(例如從 GetEnumerator() 中返回)創建的 IsolatedStorageFile 對象將無法返回準確的最大大小。

AnticipatingOutOfSpaceConditions 示例

下面的代碼示例獲得一個獨立存儲區,創建幾個文件並度量存儲區中剩餘的空間。以字節數報告剩餘的空間。

創建文件和目錄

獲得存儲區之後,您可以創建用於存儲數據的目錄和文件。在存儲區中,文件名和目錄名是相對於虛文件系統的根目錄指定的。

要創建目錄,請使用 IsolatedStorageFile 的 CreateDirectory 實例方法。如果您指定一個未創建目錄的子目錄,則會同時創建兩個目錄。如果您指定一個已存在的目錄,將不會生成任何異常。但是,如果您指定一個包含無效字符的目錄名稱,則會生成 IsolatedStorageException。

要創建並打開文件,請使用 IsolatedStorageFileStream 構造函數之一,傳入文件名、FileMode 值 OpenOrCreate 和要在其中創建文件的存儲區。然後,您可以在文件流中對數據執行想要執行的操作,例如讀取、搜索和寫入。IsolatedStorageFileStream 構造函數還可用於爲其他目的打開文件。

通過使用任何不取 IsolatedStorageFile 參數的 IsolatedStorageFileStream 構造函數,您還可以在不首先獲得存儲區的情況下創建或打開文件。當使用這種形式的構造函數時,文件是在該文件的域存儲區中創建的。

Windows 文件系統中,爲了對名稱進行比較,獨立存儲文件和目錄名都不區分大小寫。這樣,如果您創建了一個名爲 ThisFile.txt 的文件,然後又創建了名爲 THISFILE.TXT 的另一個文件,實際上只創建了一個文件。顯示時,文件名保持其原有的大小寫。

CreatingFilesAndDirectories 示例

下面的代碼示例闡釋如何在獨立存儲區創建文件和目錄。首先,檢索一個按用戶、域和程序集隔離的存儲區並放入 isoStore 變量。CreateDirectory 方法用於設置少數不同的目錄,而 IsolatedStorageFileStream 方法在這些目錄中創建一些文件。

發佈了33 篇原創文章 · 獲贊 0 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章