using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Text;
namespace Shared.Phone.UserCenter
{
///
/// 文件操作的逻辑
///
public class HdlFileLogic
{
#region ■ 变量声明___________________________
///
/// 文件操作的逻辑
///
private static HdlFileLogic m_Current = null;
///
/// 文件操作的逻辑
///
public static HdlFileLogic Current
{
get
{
if (m_Current == null)
{
m_Current = new HdlFileLogic();
}
return m_Current;
}
}
#endregion
#region ■ 文件保存和读取_____________________
///
/// 文件保存(整天忘记,所以建一个函数来玩玩)
///
/// 全路径
/// 需要序列化的东西
public void SaveFileContent(string fullName, object obj)
{
var data = JsonConvert.SerializeObject(obj);
this.SaveTextToFile(fullName, data);
}
///
/// 文件保存(整天忘记,所以建一个函数来玩玩)
///
/// 全路径
/// 需要序列化的东西
public void SaveTextToFile(string fullName, string textValue)
{
var byteData = Encoding.UTF8.GetBytes(textValue);
//写入内容
System.IO.FileStream fileStream = null;
try
{
fileStream = new System.IO.FileStream(fullName, System.IO.FileMode.Create, System.IO.FileAccess.Write);
fileStream.Write(byteData, 0, byteData.Length);
fileStream.Flush();
}
catch { }
finally
{
fileStream?.Close();
}
}
///
/// 读取文件,不限制住宅(文件不存在返回null,整天忘记,所以建一个函数来玩玩)
///
/// 全路径
///
public string ReadFileTextContent(string fullName)
{
//读取文件
var varByte = this.ReadFileByteContent(fullName);
if (varByte == null)
{
return null;
}
return Encoding.UTF8.GetString(varByte);
}
///
/// 读取文件,不限制住宅,文件不存在返回null
///
/// 全路径
///
public byte[] ReadFileByteContent(string fullName)
{
if (System.IO.File.Exists(fullName) == false)
{
return null;
}
System.IO.FileStream fileStream = null;
try
{
fileStream = new System.IO.FileStream(fullName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
byte[] array = new byte[fileStream.Length];
fileStream.Read(array, 0, array.Length);
return array;
}
catch
{
return null;
}
finally
{
fileStream?.Close();
}
}
#endregion
#region ■ 文件夹操作函数_____________________
///
/// 创建一个文件夹
///
/// 需要创建的文件夹全路径
/// 如果文件夹存在,是否需要清空文件夹
public void CreateDirectory(string fullDirectory, bool clear = false)
{
if (System.IO.Directory.Exists(fullDirectory) == false)
{
try
{
System.IO.Directory.CreateDirectory(fullDirectory);
}
catch (Exception ex)
{
HdlLogLogic.Current.WriteLog(ex, "创建文件夹失败:" + fullDirectory);
}
}
else if (clear == true)
{
//如果存在,则清空全部文件
var files = System.IO.Directory.GetFiles(fullDirectory);
foreach (var file in files)
{
this.DeleteFile(file);
}
}
}
///
/// 删除文件夹
///
/// 文件夹全路径
public void DeleteDirectory(string fullDirectory)
{
if (System.IO.Directory.Exists(fullDirectory) == true)
{
try { System.IO.Directory.Delete(fullDirectory, true); }
catch (Exception ex)
{
HdlLogLogic.Current.WriteLog(ex, "删除文件夹失败:" + fullDirectory);
}
}
}
///
/// 获取指定文件夹里面的全部文件
///
/// 文件路径(全名)
/// 单纯只是获取文件名字,如果为false时,将返回文件的全路径
///
public List GetFileFromDirectory(string directory, bool onlyFileName = true)
{
if (System.IO.Directory.Exists(directory) == false)
{
return new List();
}
List list = new List();
var files = System.IO.Directory.GetFiles(directory);
foreach (var file in files)
{
string fileName = file;
if (onlyFileName == true)
{
fileName = fileName.Substring(directory.Length + 1);
}
list.Add(fileName);
}
return list;
}
///
/// 将指定文件夹里面的全部文件移动到当前住宅的文件夹内
///
/// 文件夹全路径
/// 处理完之后,是否把文件夹删除
public void MoveDirectoryFileToHomeDirectory(string fulldirectory, bool deleteDirectory = false)
{
if (System.IO.Directory.Exists(fulldirectory) == false)
{
return;
}
var files = System.IO.Directory.GetFiles(fulldirectory);
var listFile = new List();
foreach (var file in files)
{
var f = file.Substring(fulldirectory.Length + 1);
listFile.Add(f);
}
var rootPath = Common.Config.Instance.FullPath;
foreach (var file in listFile)
{
string oldFile = System.IO.Path.Combine(fulldirectory, file);
string newFile = System.IO.Path.Combine(rootPath, file);
//移动文件
this.MoveFileToDirectory(oldFile, newFile);
}
if (deleteDirectory == true)
{
//删除文件夹
this.DeleteDirectory(fulldirectory);
}
}
///
/// 将指定文件夹里面的全部文件复制到指定的文件夹内
///
/// 复制原文件夹全路径
/// 目标文件夹全路径
public void CopyDirectoryFileToDirectory(string fullDirectory, string targetDirectory)
{
if (System.IO.Directory.Exists(targetDirectory) == false)
{
//创建目标文件夹
this.CreateDirectory(targetDirectory, false);
}
var listFile = this.GetFileFromDirectory(fullDirectory);
foreach (var file in listFile)
{
string oldFile = System.IO.Path.Combine(fullDirectory, file);
string newFile = System.IO.Path.Combine(targetDirectory, file);
//复制文件
this.CopyFile(oldFile, newFile);
}
}
#endregion
#region ■ 文件操作函数_______________________
///
/// 删除文件
///
/// 文件全名
///
public bool DeleteFile(string fullName)
{
if (System.IO.File.Exists(fullName) == true)
{
try
{
System.IO.File.Delete(fullName);
return true;
}
catch { return false; }
}
return true;
}
///
/// 移动文件
///
/// 原文件
/// 目标文件
public void MoveFileToDirectory(string oldFile, string newFile)
{
if (System.IO.File.Exists(oldFile) == true)
{
//如果目标文件存在,则切换为复制文件
if (System.IO.File.Exists(newFile) == true)
{
this.CopyFile(oldFile, newFile);
}
try
{
System.IO.File.Move(oldFile, newFile);
}
catch (Exception ex)
{
HdlLogLogic.Current.WriteLog(ex, "移动失败,原文件:" + oldFile + "\r\n目标文件:" + newFile);
}
}
}
///
/// 移动文件
///
/// 原文件
/// 目标文件
public void CopyFile(string oldFile, string newFile)
{
if (System.IO.File.Exists(oldFile) == true)
{
try
{
System.IO.File.Copy(oldFile, newFile, true);
}
catch (Exception ex)
{
HdlLogLogic.Current.WriteLog(ex, "复制失败,原文件:" + oldFile + "\r\n目标文件:" + newFile);
}
}
}
#endregion
#region ■ 删除本地文件_______________________
///
/// 删除本地所有文件
///
/// true:全部删除(用于住宅删除) false:重要的文件不删除
public void DeleteAllLocationFile(bool all = true)
{
string dPath = Common.Config.Instance.FullPath;
if (System.IO.Directory.Exists(dPath) == false)
{
return;
}
//然后获取全部的文件
List listFile = this.GetFileFromDirectory(dPath);
foreach (string file in listFile)
{
if (all == false && IsNotDeleteFile(file) == true)
{
//这是不能删除的文件
continue;
}
//删除文件
this.DeleteFile(System.IO.Path.Combine(dPath, file));
}
//如果是把文件全部删除的话,那么文件夹也一起删除掉
if (all == true)
{
//删除文件夹
System.IO.Directory.Delete(dPath, true);
}
}
///
/// 判断是不是不应该删除的文件
///
///
///
private bool IsNotDeleteFile(string fileName)
{
if (fileName == "Config.json")
{
//不能删除Config文件
return true;
}
else if (fileName.StartsWith("House_") == true)
{
//不能删除住宅文件
return true;
}
return false;
}
#endregion
}
}