using Newtonsoft.Json;
|
using System;
|
using System.Collections.Generic;
|
using System.Text;
|
|
namespace HDL_ON.Stan
|
{
|
/// <summary>
|
/// 文件操作的逻辑
|
/// </summary>
|
public class HdlFileLogic
|
{
|
#region ■ 变量声明___________________________
|
|
/// <summary>
|
/// 文件操作的逻辑
|
/// </summary>
|
private static HdlFileLogic m_Current = null;
|
/// <summary>
|
/// 文件操作的逻辑
|
/// </summary>
|
public static HdlFileLogic Current
|
{
|
get
|
{
|
if (m_Current == null)
|
{
|
m_Current = new HdlFileLogic();
|
}
|
return m_Current;
|
}
|
}
|
#endregion
|
|
#region ■ 文件保存和读取_____________________
|
|
/// <summary>
|
/// 文件保存(整天忘记,所以建一个函数来玩玩)
|
/// </summary>
|
/// <param name="fullName">全路径</param>
|
/// <param name="obj">需要序列化的东西</param>
|
public void SaveFileContent(string fullName, object obj)
|
{
|
var data = JsonConvert.SerializeObject(obj);
|
this.SaveTextToFile(fullName, data);
|
}
|
|
/// <summary>
|
/// 文件保存(整天忘记,所以建一个函数来玩玩)
|
/// </summary>
|
/// <param name="fullName">全路径</param>
|
/// <param name="textValue">文本</param>
|
public void SaveTextToFile(string fullName, string textValue)
|
{
|
var byteData = Encoding.UTF8.GetBytes(textValue);
|
this.SaveByteToFile(fullName, byteData);
|
}
|
|
/// <summary>
|
/// 文件保存(整天忘记,所以建一个函数来玩玩)
|
/// </summary>
|
/// <param name="fullName">全路径</param>
|
/// <param name="byteData">byte数据</param>
|
public void SaveByteToFile(string fullName, byte[] byteData)
|
{
|
if (byteData == null) { return; }
|
//写入内容
|
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();
|
}
|
}
|
|
/// <summary>
|
/// 读取文件,不限制住宅(文件不存在返回null,整天忘记,所以建一个函数来玩玩)
|
/// </summary>
|
/// <param name="fullName">全路径</param>
|
/// <returns></returns>
|
public string ReadFileTextContent(string fullName)
|
{
|
//读取文件
|
var varByte = this.ReadFileByteContent(fullName);
|
if (varByte == null)
|
{
|
return null;
|
}
|
return Encoding.UTF8.GetString(varByte);
|
}
|
|
/// <summary>
|
/// 读取文件,不限制住宅,文件不存在返回null
|
/// </summary>
|
/// <param name="fullName">全路径</param>
|
/// <returns></returns>
|
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 ■ 文件夹操作函数_____________________
|
|
/// <summary>
|
/// 创建一个文件夹
|
/// </summary>
|
/// <param name="fullDirectory">需要创建的文件夹全路径</param>
|
/// <param name="clear">如果文件夹存在,是否需要清空文件夹</param>
|
public void CreateDirectory(string fullDirectory, bool clear = false)
|
{
|
if (System.IO.Directory.Exists(fullDirectory) == false)
|
{
|
try
|
{
|
System.IO.Directory.CreateDirectory(fullDirectory);
|
}
|
catch { }
|
}
|
else if (clear == true)
|
{
|
//如果存在,则清空全部文件
|
var files = System.IO.Directory.GetFiles(fullDirectory);
|
foreach (var file in files)
|
{
|
this.DeleteFile(file);
|
}
|
}
|
}
|
|
/// <summary>
|
/// 删除文件夹
|
/// </summary>
|
/// <param name="fullDirectory">文件夹全路径</param>
|
public void DeleteDirectory(string fullDirectory)
|
{
|
if (System.IO.Directory.Exists(fullDirectory) == true)
|
{
|
try { System.IO.Directory.Delete(fullDirectory, true); }
|
catch { }
|
}
|
}
|
|
/// <summary>
|
/// 获取指定文件夹里面的全部文件
|
/// </summary>
|
/// <param name="directory">文件路径(全名)</param>
|
/// <param name="onlyFileName">单纯只是获取文件名字,如果为false时,将返回文件的全路径</param>
|
/// <returns></returns>
|
public List<string> GetFileFromDirectory(string directory, bool onlyFileName = true)
|
{
|
if (System.IO.Directory.Exists(directory) == false)
|
{
|
return new List<string>();
|
}
|
|
var list = new List<string>();
|
try
|
{
|
//2020.07.10的时候,出现过获取失败异常 提示:write fault on path
|
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);
|
}
|
}
|
catch {}
|
|
return list;
|
}
|
|
/// <summary>
|
/// 将指定文件夹里面的全部文件复制到指定的文件夹内
|
/// </summary>
|
/// <param name="fullDirectory">复制原文件夹全路径</param>
|
/// <param name="targetDirectory">目标文件夹全路径</param>
|
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 ■ 文件操作函数_______________________
|
|
/// <summary>
|
/// 删除文件
|
/// </summary>
|
/// <param name="fullName">文件全名</param>
|
/// <returns></returns>
|
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;
|
}
|
|
/// <summary>
|
/// 移动文件
|
/// </summary>
|
/// <param name="oldFile">原文件</param>
|
/// <param name="newFile">目标文件</param>
|
public void MoveFile(string oldFile, string newFile)
|
{
|
if (System.IO.File.Exists(oldFile) == true)
|
{
|
//如果目标文件存在,则切换为复制文件
|
if (System.IO.File.Exists(newFile) == true)
|
{
|
this.CopyFile(oldFile, newFile);
|
return;
|
}
|
try
|
{
|
System.IO.File.Move(oldFile, newFile);
|
}
|
catch { }
|
}
|
}
|
|
/// <summary>
|
/// 移动文件
|
/// </summary>
|
/// <param name="oldFile">原文件</param>
|
/// <param name="newFile">目标文件</param>
|
public void CopyFile(string oldFile, string newFile)
|
{
|
if (System.IO.File.Exists(oldFile) == true)
|
{
|
try
|
{
|
System.IO.File.Copy(oldFile, newFile, true);
|
}
|
catch { }
|
}
|
}
|
|
|
#endregion
|
}
|
}
|