using System;
|
using System.IO;
|
|
namespace Shared.IO
|
{
|
/// <summary>
|
/// 文件类
|
/// </summary>
|
public static class FileUtils
|
{
|
/// <summary>
|
/// 删除文件
|
/// </summary>
|
/// <param name="path">Path.</param>
|
public static void DeleteFile(string path)
|
{
|
System.IO.File.Delete (path);
|
}
|
|
/// <summary>
|
/// 从资源文件里获取文件
|
/// </summary>
|
/// <returns>The stream from resource.</returns>
|
/// <param name="path">Path.</param>
|
public static System.IO.Stream GetStreamFromResource(string path)
|
{
|
return new FileStream (path, FileMode.Open, FileAccess.Read);
|
}
|
|
/// <summary>
|
/// 根目录路径
|
/// </summary>
|
public static readonly string RootPath=Application.RootPath;
|
|
/// <summary>
|
/// Writes the file by bytes.
|
/// </summary>
|
/// <returns><c>true</c>, if file by bytes was writed, <c>false</c> otherwise.</returns>
|
/// <param name="fileName">File name.</param>
|
/// <param name="bytes">Bytes.</param>
|
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 {
|
}
|
}
|
|
}
|
|
/// <summary>
|
/// Writes the file by input stream.
|
/// </summary>
|
/// <returns><c>true</c>, if file by input stream was writed, <c>false</c> otherwise.</returns>
|
/// <param name="fileName">File name.</param>
|
/// <param name="inputStream">Input stream.</param>
|
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 {
|
}
|
}
|
}
|
|
/// <summary>
|
/// 读取图片文件
|
/// </summary>
|
/// <returns>The file.</returns>
|
/// <param name="fileName">File name.</param>
|
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 {
|
|
}
|
}
|
}
|
|
/// <summary>
|
/// 读取图片文件路径
|
/// </summary>
|
/// <returns>The file.</returns>
|
/// <param name="fileName">File name.</param>
|
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 "";
|
//}
|
}
|
|
/// <summary>
|
/// Reads the string list.
|
/// </summary>
|
/// <returns>The string list.</returns>
|
/// <param name="fileName">File name.</param>
|
/// <param name="encoding">Encoding.</param>
|
public static System.Collections.Generic.List<string> ReadStringList(string fileName,System.Text.Encoding encoding)
|
{
|
System.Collections.Generic.List<string> stringList = new System.Collections.Generic.List<string> ();
|
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 {
|
|
}
|
}
|
}
|
|
/// <summary>
|
/// Reads the file.
|
/// </summary>
|
/// <returns>The file.</returns>
|
/// <param name="fileName">File name.</param>
|
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 {
|
|
}
|
}
|
}
|
}
|
}
|