using System; using System.IO; using System.Collections.Generic; namespace Shared.IO { public static class FileUtils { public static string RootPath = Environment.GetFolderPath (System.Environment.SpecialFolder.Personal) + "/"; /// /// 创建一个住宅的备份文件夹 /// public static string CreateRegionBackup (string regionName) { var path = Path.Combine (RootPath, regionName); if (!Directory.Exists (path)) { Directory.CreateDirectory (path); } return path + "/"; } /// /// 删除指定区域里面的所有文件 /// /// Path. public static void DeleteRegionFiles(string path) { foreach (var fileName in ReadRegionFiles (path)) { System.IO.File.Delete (System.IO.Path.Combine (path, fileName)); Console.WriteLine ("Del region file :" + fileName); } } /// /// 读取区域文件夹里面的文件 /// public static List ReadRegionFiles (string regionRootPath) { List listFiles = new List (); DirectoryInfo TheFolder = new DirectoryInfo (regionRootPath); foreach (FileInfo NextFile in TheFolder.GetFiles ()) { listFiles.Add (NextFile.Name); } return listFiles; } /// /// 恢复区域文件夹里面的文件 /// public static void RestoreRegionFiles (string regionRootPath) { DirectoryInfo TheFolder = new DirectoryInfo (regionRootPath); int index = 0; var thFolders = TheFolder.GetFiles (); int folderCount = thFolders.Length; foreach (FileInfo NextFile in thFolders) { index++; System.IO.FileInfo fileInfo = new System.IO.FileInfo (regionRootPath + NextFile.Name); if (fileInfo.Exists) { fileInfo.MoveTo (Application.RootPath + NextFile.Name); Console.WriteLine ("Restroe : "+ NextFile.Name); } Application.RunOnMainThread (() => { int pro = (int)(index * 1.0 / folderCount * 50) + 50; Shared.SimpleControl.MainPage.Loading.Text = pro.ToString () + "%"; }); } } /// /// 遍历文件 /// public static List ReadFiles () { List listFiles = new List (); DirectoryInfo TheFolder = new DirectoryInfo (RootPath); foreach (FileInfo NextFile in TheFolder.GetFiles ()) { listFiles.Add (NextFile.Name); } return listFiles; } /// /// 更改文件名 /// /// Old file path. /// New file path. public static void ReNameFile (string oldFilePath, string newFilePath) { if (oldFilePath == newFilePath) { return; } DeleteFile (newFilePath); System.IO.FileInfo fileInfo = new System.IO.FileInfo (Application.RootPath + oldFilePath); if (fileInfo.Exists) { fileInfo.MoveTo (Application.RootPath + newFilePath); } //if (!UserConfig.Instance.LocalFiles.Contains (newFilePath)) { // UserConfig.Instance.LocalFiles.Add (newFilePath); //} } public static void ReNameFoler (string srcFolderPath, string destFolderPath) { if (srcFolderPath == destFolderPath) { return; } var srcPath = Path.Combine (RootPath, srcFolderPath); #if DEBUG DirectoryInfo root = new DirectoryInfo (RootPath); foreach (DirectoryInfo d in root.GetDirectories ()) { Console.WriteLine ("文件夹:" + d.Name); } #endif if (System.IO.Directory.Exists (srcPath)) { System.IO.DirectoryInfo folder = new System.IO.DirectoryInfo (srcPath); var path = Path.Combine (RootPath, destFolderPath); if (Directory.Exists (path)) { FileAttributes attr0 = File.GetAttributes (path); if (attr0 == FileAttributes.Directory) { Directory.Delete (path, true); } else { File.Delete (path); } } folder.MoveTo (path); #if DEBUG List listFiles = new List (); DirectoryInfo TheFolder = new DirectoryInfo (path); foreach (FileInfo NextFile in TheFolder.GetFiles ()) { Console.WriteLine (NextFile.Name); } #endif } #if DEBUG foreach (DirectoryInfo d in root.GetDirectories ()) { Console.WriteLine ("文件夹:" + d.Name); } #endif } /// /// 文件是否存在 /// /// File path. public static bool Exists (string filePath) { //System.Console.WriteLine ("Exists==" + System.IO.Path.Combine (RootPath, filePath)); return System.IO.File.Exists (System.IO.Path.Combine (RootPath, filePath)); } /// /// Deletes the file. /// /// File name. public static void DeleteFile (string fileName) { if (fileName == null || fileName == "Language.ini" || fileName == "AccountListDB") { return; } System.IO.File.Delete (System.IO.Path.Combine (RootPath, fileName)); Console.WriteLine ("删除文件名为:" + fileName); //if (UserConfig.Instance.LocalFiles.Contains (fileName)) { // UserConfig.Instance.LocalFiles.Remove (fileName); //} } /// /// Deletes all file. /// public static void DeleteAllFile () { List filesList = ReadFiles (); for (int j = 0; j < filesList.Count; j++) { var f = filesList [j]; DeleteFile (f); } } /// /// Reads the equipment message. /// /// The equipment json data. /// Common. /// If set to true is list. /// /// /// Commons是所有设备的基类,但是当传过来的Common是LightDevice时,LightDevice不是真正的设备, /// 真正的设备是它下面的调光器(LightDimming)或者继电器. /// 所以Common.GetType()获取不到真实的设备类型 /// 所以这里要手动传入设备的类型 /// public static string ReadEquipmentMessage (Common common) { string fileName = "Equipment_"; if (common.Type.ToString () == "WirelessPanel") { fileName += DeviceType.ButtonPanel.ToString () + "_" + common.SubnetID.ToString () + "_" + common.DeviceID.ToString (); } else { fileName += common.GetType ().ToString ().Replace ("Shared.", "") + "_" + common.SubnetID.ToString () + "_" + common.DeviceID.ToString (); } byte [] bytes1 = ReadFile (fileName); string one = System.Text.Encoding.UTF8.GetString (bytes1); return one; } /// /// Saves the equipment message. /// public static void SaveEquipmentMessage (Common common, string loopID = "") { string deviceType = common.Type.ToString (); if (common.Type == DeviceType.LightSwitchSocket) deviceType = DeviceType.LightSwitch.ToString (); string fileName = "Equipment_" + deviceType + "_" + common.SubnetID.ToString () + "_" + common.DeviceID.ToString (); if (loopID != "") { fileName += "_" + (loopID.Length < 2 ? "0" + loopID : loopID); } common.SavePath = fileName; Console.WriteLine (fileName); WriteFileByBytes (fileName, SimpleControl.CommonPage.MyEncodingUTF8.GetBytes (Newtonsoft.Json.JsonConvert.SerializeObject (common))); } /// /// Writes the file by bytes. /// /// true, if file by bytes was writed, false otherwise. /// File name. /// Bytes. public static bool WriteFileByBytes (string fileName, byte [] bytes) { if (fileName == null || (fileName = fileName.Trim ()) == ("")) { return false; } System.IO.FileStream fs = null; try { fs = new FileStream (System.IO.Path.Combine (RootPath, fileName), FileMode.Create, FileAccess.Write); fs.Write (bytes, 0, bytes.Length); fs.Flush (); Console.WriteLine ("SaveFile:" + fileName); //if (!UserConfig.Instance.LocalFiles.Contains (fileName)) { // UserConfig.Instance.LocalFiles.Add (fileName); //} return true; } catch (Exception ex) { Console.WriteLine ("FileUtiles Code 113:" + ex.ToString ()); return false; } finally { try { if (fs != null) { fs.Close (); } } catch (Exception ex) { Console.WriteLine ("FileUtils Code 121 :" + ex.ToString ()); } } } /// /// Writes the file by input stream. /// /// true, if file by input stream was writed, false otherwise. /// File name. /// Input stream. /// If set to true is need root path. public static bool WriteFileByInputStream (string fileName, System.IO.Stream inputStream) { if (fileName == null || (fileName = fileName.Trim ()) == ("")) { return false; } System.IO.FileStream fs = null; try { byte [] buffer = new byte [4 * 1024]; int length = 0; while ((length = inputStream.Read (buffer, 0, buffer.Length)) != 0) { if (fs == null) { fs = new FileStream (System.IO.Path.Combine (RootPath, fileName), FileMode.Create, FileAccess.Write); } fs.Write (buffer, 0, length); fs.Flush (); } return true; } catch { return false; } finally { try { if (fs != null) { fs.Close (); } } catch { } } } /// /// read file /// /// The file. /// File name. public static byte [] ReadImage (string fileName) { if (Shared.Application.IsPad) { fileName = "Pad/" + fileName; } else { fileName = "Phone/" + fileName; } System.IO.FileStream fs = null; try { if (System.IO.File.Exists (System.IO.Path.Combine (RootPath, fileName))) { fs = new FileStream (System.IO.Path.Combine (RootPath, fileName), FileMode.Open, FileAccess.Read); } else if (System.IO.File.Exists (fileName)) { fs = new FileStream (fileName, FileMode.Open, FileAccess.Read); } else { return new byte [0]; } byte [] bytes = new byte [fs.Length]; fs.Read (bytes, 0, bytes.Length); return bytes; } catch { return new byte [0]; } finally { try { if (fs != null) { fs.Close (); } } catch { } } } public static byte [] ReadFile (string fileName) { System.IO.FileStream fs = null; try { if (System.IO.File.Exists (System.IO.Path.Combine (RootPath, fileName))) { fs = new FileStream (System.IO.Path.Combine (RootPath, fileName), FileMode.Open, FileAccess.Read); } else if (System.IO.File.Exists (fileName)) { fs = new FileStream (fileName, FileMode.Open, FileAccess.Read); } else { return new byte [0]; } byte [] bytes = new byte [fs.Length]; fs.Read (bytes, 0, bytes.Length); return bytes; } catch { return new byte [0]; } finally { try { if (fs != null) { fs.Close (); } } catch { } } } /// /// 下载电台、音乐、DLNA等等网络图片 /// /// /// public static void DownLoadImage (string fileName, string url) { #region 如果当前目录不存在,就初始化 string directioryPath = null; if (Shared.Application.IsPad) { directioryPath = "Pad/" + "MusicImage"; } else { directioryPath = "Phone/" + "MusicImage"; } directioryPath = System.IO.Path.Combine (RootPath, directioryPath); if (!System.IO.Directory.Exists (directioryPath)) { System.IO.Directory.CreateDirectory (directioryPath); } #endregion if (!System.IO.File.Exists (fileName)) { System.Threading.Tasks.Task.Run (() => { FileStream fs = null; try { Shared.Net.MyWebClient webClient = new Shared.Net.MyWebClient (); byte [] recevieBytes = webClient.DownloadData (new Uri (url)); fs = new FileStream (fileName, FileMode.Create, FileAccess.Write); fs.Write (recevieBytes, 0, recevieBytes.Length); fs.Flush (); } catch { } finally { if (fs != null) { fs.Close (); } } }); } } /// /// 下载电台、音乐、DLNA等等网络图片 /// /// /// public static string DownLoadImageFormBaidu (string album, string artist) { var url = "http://tingapi.ting.baidu.com/v1/restserver/ting?from=qianqian&version=2.1.0&method=baidu.ting.search.catalogSug&format=json&query=" + artist; string directioryPath = "MusicImage"; directioryPath = System.IO.Path.Combine (RootPath, directioryPath); if (!System.IO.Directory.Exists (directioryPath)) { System.IO.Directory.CreateDirectory (directioryPath); } try { var song = Newtonsoft.Json.JsonConvert.DeserializeObject (new Net.MyWebClient ().DownloadString (new Uri (url))); if(song==null){ return null; } foreach (var tempAlbum in song.album) { if (tempAlbum.albumname == album && artist == tempAlbum.artistname) { var bytes = new Shared.Net.MyWebClient ().DownloadData (new Uri (tempAlbum.artistpic.Split ('@') [0] + "@s_1,w_160,h_160")); var filePath = System.IO.Path.Combine (directioryPath, "AlbumArtistImage_" + album); var fs = new FileStream (filePath, FileMode.Create, FileAccess.Write); fs.Write (bytes, 0, bytes.Length); fs.Flush (); fs.Close (); return filePath; } } foreach (var tempArtist in song.artist) { if (artist == tempArtist.artistname) { var bytes = new Shared.Net.MyWebClient ().DownloadData (new Uri (tempArtist.artistpic.Split ('@') [0] + "@s_1,w_160,h_160")); var filePath = System.IO.Path.Combine (directioryPath, "AlbumArtistImage_" + artist); var fs = new FileStream (filePath, FileMode.Create, FileAccess.Write); fs.Write (bytes, 0, bytes.Length); fs.Flush (); fs.Close (); return filePath; } } } catch { } return null; } } [System.Serializable] class Song { //string [] ss = new string [] { }; public List album = new List (); public List artist = new List (); public string sss; } [System.Serializable] class Album { public string albumname; public string artistname; public string artistpic; } [System.Serializable] class Artist { public string artistname; public string artistpic; } }