一般我們在處理檔案的時候,若不再需要使用該檔案,就需要將這個資源關閉起來,可是,為什麼 StorageFile物件裡面,卻沒有任何關於 Close 這樣的輔助方法呢?
理由很簡單,因為,StorageFile 只是個抽象的路徑名稱,用來代表檔案系統中的某個檔案,也就是說,當您取得了 StorageFile物件後,例如,使用 StorageFolder.GetFileAsync (使用指定的檔案名稱來取得目前資料夾中的單一檔案。)來取得一個 StorageFile 物件,並不代表了這個檔案已經被開啟並且被鎖住了,這個 StorageFile 物件僅僅只是提供了一個參考到這個檔案的資訊而已。
若您實際取得該StorageFile的資料流(Stream),則您才是開始針對該檔案進行存取動作的開始,不過,當對於該檔案的資料流處理動作完成後,記得要將該資料流做關閉(Close)和 Dispose的動作。
您可以依據您的需求,參考底下四種方法,取得您所需求的資料流
StorageFile.OpenAsync 透過檔案開啟隨機存取資料流。
StorageFile.OpenReadAsync 透過目前的檔案開啟隨機存取資料流來讀取檔案內容。
StorageFile.OpenSequentialReadAsync 透過目前的檔案開啟循序存取資料流來讀取檔案內容。
StorageFile.OpenTransactedWriteAsync 開啟可用於異動寫入作業之檔案的隨機存取資料流。
理由很簡單,因為,StorageFile 只是個抽象的路徑名稱,用來代表檔案系統中的某個檔案,也就是說,當您取得了 StorageFile物件後,例如,使用 StorageFolder.GetFileAsync (使用指定的檔案名稱來取得目前資料夾中的單一檔案。)來取得一個 StorageFile 物件,並不代表了這個檔案已經被開啟並且被鎖住了,這個 StorageFile 物件僅僅只是提供了一個參考到這個檔案的資訊而已。
若您實際取得該StorageFile的資料流(Stream),則您才是開始針對該檔案進行存取動作的開始,不過,當對於該檔案的資料流處理動作完成後,記得要將該資料流做關閉(Close)和 Dispose的動作。
您可以依據您的需求,參考底下四種方法,取得您所需求的資料流
StorageFile.OpenAsync 透過檔案開啟隨機存取資料流。
StorageFile.OpenReadAsync 透過目前的檔案開啟隨機存取資料流來讀取檔案內容。
StorageFile.OpenSequentialReadAsync 透過目前的檔案開啟循序存取資料流來讀取檔案內容。
StorageFile.OpenTransactedWriteAsync 開啟可用於異動寫入作業之檔案的隨機存取資料流。
StorageFile storageFile = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(uri); var randomAccessStream = await storageFile.OpenReadAsync(); Stream stream = randomAccessStream.AsStreamForRead();
沒有留言:
張貼留言