using System; using System.IO; using System.Collections.Generic; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Shared; using HDL_ON.UI; using HDL_ON.DAL.Net; using HDL_ON.DAL; namespace HDL_ON.MyIO { public static class FileUtils { public static string RootPath = Environment.GetFolderPath(System.Environment.SpecialFolder.Personal) + "/"; /// /// 创建一个住宅的备份文件夹 /// public static string CreateRegionBackup(string regionId) { var path = Path.Combine(RootPath, regionId); if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } return path + "/"; } /// /// 判断是否已经存在住宅的本地文件夹 /// public static bool ExistRegion(string regionId) { var path = Path.Combine(RootPath, regionId); return Directory.Exists(path); } /// /// 删除指定区域里面的所有文件 /// /// Path. public static void DeleteRegionFiles(string path) { foreach (var fileName in ReadRegionFiles(path)) { System.IO.File.Delete(System.IO.Path.Combine(path, fileName)); MainPage.Log("Del region file :" + fileName); } } /// /// 读取区域文件夹里面的文件 /// 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++; if (NextFile.Name == "null" || NextFile.Name == "UserConfig" || NextFile.Name == "Register_File" || NextFile.Name == "AccountListDB") { continue; } System.IO.FileInfo fileInfo = new System.IO.FileInfo(regionRootPath + NextFile.Name); if (fileInfo.Exists) { fileInfo.MoveTo(Application.RootPath + NextFile.Name); MainPage.Log("Restroe : " + NextFile.Name); } } } /// /// 遍历文件 /// public static List ReadFiles(bool reInit = true) { List listFiles = new List(); DirectoryInfo TheFolder = new DirectoryInfo(RootPath); foreach (FileInfo NextFile in TheFolder.GetFiles()) { listFiles.Add(NextFile.Name); } try { if (reInit) { MainPage.LocationFiles = listFiles; } } catch { } 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 ()) { MainPage.Log ("文件夹:" + 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 ()) { MainPage.Log (NextFile.Name); } #endif } #if DEBUG foreach (DirectoryInfo d in root.GetDirectories ()) { MainPage.Log ("文件夹:" + d.Name); } #endif } /// /// 文件是否存在 /// /// File path. public static bool Exists(string filePath) { //System.MainPage.WriteLog ("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)); MainPage.Log("删除文件名为:" + 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]; if (f == "linphonerc" || f == "AccountListDB") continue; 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.Type + "_" + 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 + "_" + common.DeviceID; if (loopID != "") { fileName += "_" + (loopID.Length < 2 ? "0" + loopID : loopID); } common.SavePath = fileName; MainPage.Log(fileName); WriteFileByBytes(fileName, 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(); MainPage.Log("SaveFile:" + fileName); //if (!UserConfig.Instance.LocalFiles.Contains (fileName)) { // UserConfig.Instance.LocalFiles.Add (fileName); //} return true; } catch (Exception ex) { MainPage.Log("FileUtiles Code 113:" + ex.ToString()); return false; } finally { try { if (fs != null) { fs.Close(); } } catch (Exception ex) { MainPage.Log("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 { HDL_ON.DAL.Net.MyWebClient webClient = new HDL_ON.DAL.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 HDL_ON.DAL.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 HDL_ON.DAL.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 HDL_ON.DAL.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; } }