using System; using System.IO; namespace Shared.IO { /// /// 文件类 /// public static class FileUtils { /// /// 删除文件 /// /// Path. public static void DeleteFile(string path) { System.IO.File.Delete (path); } /// /// 从资源文件里获取文件 /// /// The stream from resource. /// Path. public static System.IO.Stream GetStreamFromResource(string path) { return new FileStream (path, FileMode.Open, FileAccess.Read); } /// /// 根目录路径 /// public static readonly string RootPath=Application.RootPath; /// /// 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 (); return true; } catch { return false; } finally { try { if (fs != null) { fs.Close (); } } catch { } } } /// /// Writes the file by input stream. /// /// true, if file by input stream was writed, false otherwise. /// File name. /// Input stream. public static bool WriteFileByInputStream(string fileName, System.IO.Stream inputStream) { 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); byte[] buffer = new byte[4 * 1024]; int length = 0; while ((length = inputStream.Read (buffer, 0, buffer.Length)) != 0) { fs.Write (buffer, 0, length); fs.Flush (); } return true; } catch { return false; } finally { try { if (fs != null) { fs.Close (); } } catch { } } } /// /// 读取图片文件 /// /// The file. /// File name. public static byte []ReadImage1(string fileName) { string tempfileName = fileName; //暂时不处理pad图片,先用phone图片 //if (Shared.Application.IsPad) // { // fileName = "Pad/" + fileName; //} //else { fileName = "Phone/" + fileName; } System.IO.FileStream fs = null; try { var filePath = Foundation.NSBundle.MainBundle.PathForResource(fileName, null); if (filePath!=null){ fs = new FileStream(filePath, FileMode.Open, FileAccess.Read); } else if (System.IO.File.Exists (System.IO.Path.Combine (Application.RootPath, tempfileName))) { fs = new FileStream (System.IO.Path.Combine (Application.RootPath, tempfileName), 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 { } } } /// /// 读取图片文件路径 /// /// The file. /// File name. public static string GetImageFilePath(string fileName) { if(fileName==null) { return ""; } //可能是提交了完整的路径过来 if (System.IO.File.Exists(fileName)) { return fileName; } // 先找是否是用户已经更改过的图片,这个是优先选择 if (System.IO.File.Exists(System.IO.Path.Combine(Application.RootPath, fileName))) { return System.IO.Path.Combine(Application.RootPath, fileName); } string newFileName = null; if (Application.Skin == null) { newFileName = "Phone/" + fileName; } else { newFileName = Application.Skin + "/" + fileName; } //data 目录下查找 ,有可能是多皮肤的数据 if (System.IO.File.Exists(System.IO.Path.Combine(Application.RootPath, newFileName))) { return System.IO.Path.Combine(Application.RootPath, newFileName); } //Resource目录下查找 var filePath = Foundation.NSBundle.MainBundle.PathForResource(newFileName, null); if (filePath != null) { return filePath; } return ""; ////资源文件里的文件 //else if (System.IO.File.Exists(fileName)) //{ // return fileName; //} //else //{ // return ""; //} } /// /// Reads the string list. /// /// The string list. /// File name. /// Encoding. public static System.Collections.Generic.List ReadStringList(string fileName,System.Text.Encoding encoding) { System.Collections.Generic.List stringList = new System.Collections.Generic.List (); System.IO.StreamReader fs = null; try { var filePath = Foundation.NSBundle.MainBundle.PathForResource(fileName, null); if (filePath != null) { fs = new StreamReader(filePath, encoding); } else if (System.IO.File.Exists (System.IO.Path.Combine (RootPath, fileName))) { fs = new StreamReader (System.IO.Path.Combine (RootPath, fileName),encoding); } else if (System.IO.File.Exists (fileName)) { fs = new StreamReader (fileName,encoding); } else { return stringList; } string s; while(null!=(s=fs.ReadLine())) { stringList.Add(s); } return stringList; } catch { return stringList; } finally { try { if (fs != null) { fs.Close (); } } catch { } } } /// /// Reads the file. /// /// The file. /// File name. public static byte []ReadFile(string fileName) { System.IO.FileStream fs = null; try { var filePath = Foundation.NSBundle.MainBundle.PathForResource(fileName, null); if (filePath != null) { fs = new FileStream(filePath, FileMode.Open, FileAccess.Read); } else 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 { } } } } }