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 {
}
}
}
}
}