windows 8文件操作帮助类FileHelper
生活随笔
收集整理的這篇文章主要介紹了
windows 8文件操作帮助类FileHelper
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/保存在應用程序本地目錄的。也就是在用戶名/appdata/local/packages/程序ID/localstate
// FileType的代表是根目錄下的文件夾
public enum FileType{Book = 1,Theme,Configuration,Log,Local}/// <summary>/// 此類用于對應用程序根目錄的文件進行操作/// </summary>public class FileHelper{//http://msdn.microsoft.com/zh-cn/library/windows/apps/hh465262.aspxStorageFolder localFolder = ApplicationData.Current.LocalFolder;private readonly string bookFolder = "Book";private readonly string themeFolder = "Theme";private readonly string configFolder = "Configuration";//private readonly string booktypeFolder = "BookType";private readonly string logFolder = "Log";/// <summary>/// 打開讀取文件,返回文件流/// </summary>/// <param name="fileName"></param>/// <returns></returns>public async Task<Stream> OpenReadFile(string fileName, FileType ft){try{StorageFolder sf = await CheckFolder(ft);StorageFile sfile = await sf.GetFileAsync(fileName);if (sfile != null){return await sfile.OpenStreamForReadAsync();}}catch (Exception){}return null;}#region 返回不同類型的文件夾操作類public async Task<StorageFolder> CheckFolder(FileType ft){StorageFolder sf = null;switch (ft){case FileType.Book:sf = await localFolder.CreateFolderAsync(bookFolder, CreationCollisionOption.OpenIfExists);break;case FileType.Theme:sf = await localFolder.CreateFolderAsync(themeFolder, CreationCollisionOption.OpenIfExists);break;case FileType.Configuration:sf = await localFolder.CreateFolderAsync(configFolder, CreationCollisionOption.OpenIfExists);break;case FileType.Log:sf = await localFolder.CreateFolderAsync(logFolder, CreationCollisionOption.OpenIfExists);break;case FileType.Local:sf = localFolder;break;default:sf = localFolder;break;}return sf;}#endregion/// <summary>/// 打開寫入文件,返回文件流/// </summary>/// <param name="fileName"></param>/// <returns></returns>public async Task<Stream> OpenWriteFile(string fileName, FileType ft){try{StorageFolder sf = await CheckFolder(ft);StorageFile sfile = await sf.GetFileAsync(fileName);if (sfile != null){return await sfile.OpenStreamForWriteAsync();}}catch (Exception){}return null;}public async Task<Stream> OpenReplace(string fileName, FileType ft){try{StorageFolder sf = await CheckFolder(ft);return await sf.OpenStreamForWriteAsync(fileName, CreationCollisionOption.ReplaceExisting);}catch (Exception){}return null;}public async Task<IRandomAccessStream> ReadWriteFile(string fileName, FileType ft){try{StorageFolder sf = await CheckFolder(ft);StorageFile sfile = await sf.GetFileAsync(fileName);if (sfile != null){IRandomAccessStream ra = await sfile.OpenAsync(FileAccessMode.ReadWrite);return ra;}}catch (Exception ex){Debug.WriteLine(ex.Message);}return null;}public async Task SaveFile(string str, string fileName, FileType ft){using (Stream stream = await OpenWriteFile(fileName, ft)){if (stream == null){StorageFile sf = await CreateFile(fileName, ft);using (Stream s = await sf.OpenStreamForWriteAsync()){using (StreamWriter sw = new StreamWriter(s)){await sw.WriteAsync(str);}}}}}public async Task SaveFile(Stream str, string fileName, FileType ft){using (Stream stream = await OpenWriteFile(fileName, ft)){if (stream == null){StorageFile sf = await CreateFile(fileName, ft);using (Stream s = await sf.OpenStreamForWriteAsync()){byte[] b = new byte[str.Length];str.Read(b, 0, b.Length);s.Write(b, 0, b.Length);}}}}public async Task SaveFile(byte[] b, string fileName, FileType ft){using (Stream stream = await OpenWriteFile(fileName, ft)){if (stream == null){StorageFile sf = await CreateFile(fileName, ft);using (Stream s = await sf.OpenStreamForWriteAsync()){s.Write(b, 0, b.Length);}}}}/// <summary>/// 保存系統文件/// </summary>/// <param name="str"></param>/// <param name="path"></param>/// <returns></returns>public async Task SaveFile(Stream str, string path){StorageFolder sf = await StorageFolder.GetFolderFromPathAsync(Path.GetDirectoryName(path));StorageFile sfile = await sf.CreateFileAsync(Path.GetFileName(path), CreationCollisionOption.ReplaceExisting);using (Stream s = await sfile.OpenStreamForWriteAsync()){byte[] b = new byte[str.Length];str.Read(b, 0, b.Length);s.Write(b, 0, b.Length);}}/// <summary>/// 創建文件 ,并且返回創建的文件對象/// </summary>/// <param name="fileName"></param>/// <returns></returns>public async Task<StorageFile> CreateFile(string fileName, FileType ft){StorageFolder sf = await CheckFolder(ft);StorageFile sfile = await sf.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);return sfile;}/// <summary>/// 創建文件 ,并且返回創建的文件對象/// </summary>/// <param name="fileName"></param>/// <returns></returns>public async Task<bool> FileExists(string fileName, FileType ft){try{StorageFolder sf = await CheckFolder(ft);StorageFile sfile = await sf.GetFileAsync(fileName);if (sfile == null){return false;}return true;}catch (Exception){}return false;}/// <summary>/// 根據后綴尋找文件 /// </summary>/// <param name="filter"></param>public async Task<string[]> FindFile(string filter, FileType ft){StorageFolder sf = await CheckFolder(ft);IReadOnlyList<StorageFile> all = await sf.GetFilesAsync();List<string> list = new List<string>();if (all != null && all.Count > 0){foreach (var item in all){if (item.FileType.ToLower() == filter.ToLower()){list.Add(item.Name);}}if (list.Count > 0){return list.ToArray();}}return new string[0];}/// <summary>/// 刪除文件/// </summary>/// <param name="fileName"></param>public async Task DeleteFile(string fileName, FileType ft){try{StorageFolder sf = await CheckFolder(ft);StorageFile sfile = await sf.GetFileAsync(fileName);if (sfile != null){await sfile.DeleteAsync();}}catch (Exception){}}ApplicationDataContainer setting = ApplicationData.Current.LocalSettings;/// <summary>/// 保存設置/// </summary>/// <param name="key"></param>/// <param name="value"></param>public void SaveSetting(string key, object value){setting.Values[key] = value;}/// <summary>/// 刪除設置:普通鍵值對/// </summary>/// <param name="key"></param>public void DeleteSetting(string key){if (setting.Values.ContainsKey(key)){setting.Values.Remove(key);}}/// <summary>/// 獲取setting/// </summary>/// <param name="key"></param>/// <returns></returns>public object GetSetting(string key){object obj = null;if (setting.Values.ContainsKey(key)){obj = setting.Values[key];}return obj;}/// <summary>/// 是否存在這個設置/// </summary>/// <param name="key"></param>/// <returns></returns>public bool HasSetting(string key){if (setting.Values.ContainsKey(key)){return true;}return false;}public async Task SaveXml<T>(T t, string fileName, FileType ft){Stream stream = await OpenReplace(fileName, ft);if (stream == null){StorageFile sf = await CreateFile(fileName, ft);stream = await sf.OpenStreamForWriteAsync();}XmlSerializer serializer = new XmlSerializer(typeof(T));try{serializer.Serialize(stream, t);}catch (Exception ex){Debug.WriteLine(ex.Message);}finally{stream.Dispose();}}public async Task<T> ReadXml<T>(string fileName, FileType ft){Stream stream = await OpenReadFile(fileName, ft);if (stream != null && stream.Length > 0){try{XmlSerializer serializer = new XmlSerializer(typeof(T));T t = (T)serializer.Deserialize(stream);return t;}catch (Exception ex){Debug.WriteLine(ex.Message);}finally{stream.Dispose();}}return default(T);}//var uri = new Windows.Foundation.Uri('ms-appx:///images/logo.png');//var file = Windows.Storage.StorageFile.getFileFromApplicationUriAsync(uri);/// <summary>/// 讀取應用程序文件/// </summary>/// <param name="path">文件路徑 ,按普通路徑來給 /Images/1.jpg</param>/// <returns></returns>public async Task<Stream> ReadAppFile(string path){Uri baseUri = new Uri("ms-appx://");Uri uri = new Uri(baseUri, path);try{StorageFile sf = await StorageFile.GetFileFromApplicationUriAsync(uri);if (sf != null){return await sf.OpenStreamForReadAsync();}}catch (Exception ex){Debug.WriteLine(ex.Message);}return null;}}?
轉載于:https://www.cnblogs.com/poorpan/archive/2012/08/02/windows%e6%96%87%e4%bb%b6%e6%93%8d%e4%bd%9c.html
總結
以上是生活随笔為你收集整理的windows 8文件操作帮助类FileHelper的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WRF参数配置(PartI)
- 下一篇: C#enum枚举