using System;
|
using System.IO;
|
using System.Collections.Generic;
|
using Shared;
|
|
namespace HDL_ON
|
{
|
public static class FileUtils
|
{
|
public static string RootPath = Environment.GetFolderPath(System.Environment.SpecialFolder.Personal) + "/";
|
|
/// <summary>
|
/// 是否存在文件夹
|
/// </summary>
|
/// <returns></returns>
|
public static bool IsExisFolder(string folderName)
|
{
|
bool result = false;
|
var path = Path.Combine(RootPath, folderName);
|
result = Directory.Exists(path);
|
return result;
|
}
|
/// <summary>
|
/// 创建一个住宅的备份文件夹
|
/// </summary>
|
public static string CreateRegionBackup(string regionId)
|
{
|
var path = Path.Combine(RootPath, regionId);
|
if (!Directory.Exists(path))
|
{
|
Directory.CreateDirectory(path);
|
}
|
return path + "/";
|
}
|
/// <summary>
|
/// 判断是否已经存在住宅的本地文件夹
|
/// </summary>
|
public static bool ExistRegion(string regionId)
|
{
|
var path = Path.Combine(RootPath, regionId);
|
return Directory.Exists(path);
|
}
|
|
/// <summary>
|
/// 删除指定区域里面的所有文件
|
/// </summary>
|
/// <param name="path">Path.</param>
|
public static void DeleteRegionFiles(string path)
|
{
|
foreach (var fileName in ReadRegionFiles(path))
|
{
|
File.Delete(Path.Combine(path, fileName));
|
MainPage.Log("删除文件名为:" + fileName);
|
}
|
}
|
|
/// <summary>
|
/// 读取区域文件夹里面的文件
|
/// </summary>
|
static List<string> ReadRegionFiles(string regionRootPath)
|
{
|
List<string> listFiles = new List<string>();
|
DirectoryInfo TheFolder = new DirectoryInfo(regionRootPath);
|
foreach (FileInfo NextFile in TheFolder.GetFiles())
|
{
|
listFiles.Add(NextFile.Name);
|
}
|
return listFiles;
|
}
|
|
/// <summary>
|
/// 恢复区域文件夹里面的文件
|
/// </summary>
|
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.Contains(ImageUtlis.HEADIMAGE))
|
{
|
continue;
|
}
|
if (NextFile.Name == "null" || NextFile.Name == "UserConfig" || NextFile.Name == "UserInfo_File" || NextFile.Name == "AccountListDB" || NextFile.Name == OnAppConfig.ConfigFile)
|
{
|
continue;
|
}
|
FileInfo fileInfo = new FileInfo(regionRootPath + NextFile.Name);
|
if (fileInfo.Exists)
|
{
|
fileInfo.MoveTo(Application.RootPath + NextFile.Name);
|
MainPage.Log("Restroe : " + NextFile.Name);
|
}
|
}
|
}
|
|
/// <summary>
|
/// 遍历文件
|
/// </summary>
|
public static List<string> ReadFiles()
|
{
|
List<string> listFiles = new List<string>();
|
DirectoryInfo TheFolder = new DirectoryInfo(RootPath);
|
foreach (FileInfo NextFile in TheFolder.GetFiles())
|
{
|
listFiles.Add(NextFile.Name);
|
}
|
return listFiles;
|
}
|
|
/// <summary>
|
/// 更改文件名
|
/// </summary>
|
/// <param name="oldFilePath">Old file path.</param>
|
/// <param name="newFilePath">New file path.</param>
|
public static void ReNameFile(string oldFilePath, string newFilePath)
|
{
|
if (oldFilePath == newFilePath)
|
{
|
return;
|
}
|
DeleteFile(newFilePath);
|
FileInfo fileInfo = new FileInfo(Application.RootPath + oldFilePath);
|
if (fileInfo.Exists)
|
{
|
fileInfo.MoveTo(Application.RootPath + 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 (Directory.Exists(srcPath))
|
{
|
DirectoryInfo folder = new 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<string> listFiles = new List<string> ();
|
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
|
}
|
|
/// <summary>
|
/// 文件是否存在
|
/// </summary>
|
/// <param name="filePath">File path.</param>
|
public static bool Exists(string filePath)
|
{
|
//System.MainPage.WriteLog ("Exists==" + Path.Combine (RootPath, filePath));
|
return File.Exists(Path.Combine(RootPath, filePath));
|
}
|
|
/// <summary>
|
/// Deletes the file.
|
/// </summary>
|
/// <param name="fileName">File name.</param>
|
public static void DeleteFile(string fileName)
|
{
|
if (fileName == null || fileName == "Language.ini" || fileName == "AccountListDB" || fileName == OnAppConfig.ConfigFile)
|
{
|
return;
|
}
|
File.Delete(Path.Combine(RootPath, fileName));
|
MainPage.Log("删除文件名为:" + fileName);
|
}
|
|
/// <summary>
|
/// Deletes all file.
|
/// </summary>
|
public static void DeleteAllFile()
|
{
|
List<string> filesList = ReadFiles();
|
for (int j = 0; j < filesList.Count; j++)
|
{
|
var f = filesList[j];
|
if (f == "linphonerc" || f == "AccountListDB" || f == "UserInfo_File" || f == OnAppConfig.ConfigFile)
|
continue;
|
DeleteFile(f);
|
}
|
}
|
|
/// <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;
|
}
|
|
FileStream fs = null;
|
|
try
|
{
|
fs = new FileStream(Path.Combine(RootPath, fileName), FileMode.Create, FileAccess.Write);
|
fs.Write(bytes, 0, bytes.Length);
|
fs.Flush();
|
MainPage.Log("SaveFile:" + 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());
|
}
|
}
|
}
|
|
/// <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>
|
/// <param name="isNeedRootPath">If set to <c>true</c> is need root path.</param>
|
public static bool WriteFileByInputStream(string fileName, Stream inputStream)
|
{
|
if (fileName == null || (fileName = fileName.Trim()) == (""))
|
{
|
return false;
|
}
|
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(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
|
{
|
}
|
}
|
}
|
|
/// <summary>
|
/// read file
|
/// </summary>
|
/// <returns>The file.</returns>
|
/// <param name="fileName">File name.</param>
|
public static byte[] ReadImage(string fileName)
|
{
|
if (Shared.Application.IsPad)
|
{
|
fileName = "Pad/" + fileName;
|
}
|
else
|
{
|
fileName = "Phone/" + fileName;
|
}
|
FileStream fs = null;
|
try
|
{
|
if (File.Exists(Path.Combine(RootPath, fileName)))
|
{
|
fs = new FileStream(Path.Combine(RootPath, fileName), FileMode.Open, FileAccess.Read);
|
}
|
else if (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)
|
{
|
FileStream fs = null;
|
try
|
{
|
if (File.Exists(Path.Combine(RootPath, fileName)))
|
{
|
fs = new FileStream(Path.Combine(RootPath, fileName), FileMode.Open, FileAccess.Read);
|
}
|
else if (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>
|
/// <param name="fileName"></param>
|
/// <param name="imagePath"></param>
|
public static void FileCopyToRootPath(string oldPath, string fileName)
|
{
|
System.IO.FileInfo fileInfo = new System.IO.FileInfo(oldPath);
|
if (fileInfo.Exists)
|
{
|
fileInfo.CopyTo(Path.Combine(RootPath, fileName), true);
|
//Utlis.WriteLine("FileCopyToRootPath : " + Path.Combine(RootPath, fileName));
|
}
|
}
|
|
}
|
//[System.Serializable]
|
//class Song
|
//{
|
// //string [] ss = new string [] { };
|
// public List<Album> album = new List<Album>();
|
// public List<Artist> artist = new List<Artist>();
|
// 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;
|
//}
|
|
|
}
|