using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace DataProcess.Utils
{
class FileHelper
{
public static void DeleteFilesAndFolders(string path)
{
// Delete files.
string[] files = Directory.GetFiles(path);
foreach (var file in files)
{
File.Delete(file);
}
// Delete folders.
string[] folders = Directory.GetDirectories(path);
foreach (var folder in folders)
{
DeleteFilesAndFolders(folder);
Directory.Delete(folder);
}
}
/// <summary>
/// 读取文件文本内容
/// </summary>
/// <param name="filePath"></param>
/// <returns></returns>
public static string ReadText (string filePath)
{
string content = "";
if(File.Exists(filePath))
{
StreamReader sr = new StreamReader(filePath);
content = sr.ReadToEnd();
sr.Close();
}
return content;
}
/// <summary>
/// 写入文件
/// </summary>
/// <param name="fileName">文件名</param>
/// <param name="content">待写入内容</param>
public void WriteToFiles(string fileName, string content)
{
if (string.IsNullOrEmpty(fileName) || string.IsNullOrEmpty(content))
{
return;
}
try
{
using (FileStream fs = new FileStream(fileName, FileMode.Append, FileAccess.Write))
{
using (StreamWriter sw = new StreamWriter(fs))
{
sw.WriteLine(content);
sw.Close();
}
fs.Close();
}
}
catch (Exception ex)
{
}
}
public string RemoveEndBracket(string str)
{
if (string.IsNullOrEmpty(str))
{
return string.Empty;
}
string outStr = str.Replace("(", "(").Replace(")", ")");
string patern = @"\([^\(\)年]*?\)";
MatchCollection mc = Regex.Matches(outStr, patern);
if (mc.Count == 0)
{
return outStr;
}
else
{
Match match = mc[mc.Count - 1];
if (outStr.Trim().EndsWith(match.Value))
{
outStr = outStr.TrimEnd(match.Value.ToCharArray());
}
}
return outStr;
}
/// <summary>
/// 读取Text文件,返回List<string>
/// </summary>
/// <param name="fileName"></param>
/// <returns></returns>
public static List<string> ReadTextToList(string fileName)
{
try
{
StreamReader sr = new StreamReader(fileName, Encoding.Default);
List<string> fileContent = new List<string>();
String line;
while ((line = sr.ReadLine()) != null)
{
fileContent.Add(line.ToString());
}
sr.Close();
return fileContent;
}
catch (Exception ex)
{
return null;
}
}
public static void WriteDicToFile(Dictionary<string, List<string>> historyCache, string dupCachePath)
{
FileStream fs = new FileStream(dupCachePath, FileMode.Create, FileAccess.Write);
StreamWriter sr = new StreamWriter(fs, Encoding.UTF8);
foreach (KeyValuePair<string, List<string>> kv in historyCache) {
string md5 = kv.Key;
foreach (string fileID in kv.Value) {
string temp = md5 + "\t" + fileID;
sr.WriteLine(temp);
}
}
sr.Close();
fs.Close();
}
public void WriteListToText(List<string> content, string fileName)
{
File.WriteAllLines(fileName, content, Encoding.UTF8);
}
public static Dictionary<string, string> ReadFileToDic(string path)
{
Dictionary<string, string> dic = new Dictionary<string, string>();
if (File.Exists(path))
{
StreamReader sr = new StreamReader(path);
while (!sr.EndOfStream)
{
List<string> lstSplit = sr.ReadLine().Split('\t').ToList();
if (!dic.ContainsKey(lstSplit[0]))
{
dic.Add(lstSplit[0], lstSplit[1]);
}
}
}
return dic;
}
/// <summary>
/// 对于一个键可能有多个值的情况
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
public static Dictionary<string, List<string>> ReadMultiFileToDic(string path)
{
Dictionary<string, List<string>> dic = new Dictionary<string, List<string>>();
if (File.Exists(path))
{
StreamReader sr = new StreamReader(path);
while (!sr.EndOfStream)
{
List<string> lstSplit = sr.ReadLine().Split('\t').ToList();
if (!dic.ContainsKey(lstSplit[0]))
{
List<string> hs = new List<string>();
hs.Add(lstSplit[1]);
dic.Add(lstSplit[0], hs);
}
else
{
if(!dic[lstSplit[0]].Contains(lstSplit[1]))
dic[lstSplit[0]].Add(lstSplit[1]);
}
}
sr.Close();
}
return dic;
}
/**
* 获取文件夹下面全部文件名称
*
**/
public static void Director(string dir, List<string> list)
{
DirectoryInfo d = new DirectoryInfo(dir);
FileInfo[] files = d.GetFiles();//文件
DirectoryInfo[] directs = d.GetDirectories();//文件夹
foreach (FileInfo f in files)
{
list.Add(dir + "\\" + f.Name);//添加文件名到列表中
}
//获取子文件夹内的文件列表,递归遍历
foreach (DirectoryInfo dd in directs)
{
Director(dd.FullName, list);
}
}
public void WriteFile(string path, string content)
{
//在将文本写入文件前,处理文本行
//StreamWriter一个参数默认覆盖
//StreamWriter第二个参数为false覆盖现有文件,为true则把文本追加到文件末尾
using (System.IO.StreamWriter file = new System.IO.StreamWriter(path, true))
{
file.WriteLine(content);// 直接追加文件末尾,换行
}
}
public static string DictionaryToJson(Dictionary<string, string> myDic)
{
string jsonStr = JsonConvert.SerializeObject(myDic);
return jsonStr;
}
public static Dictionary<string, string> JsonToDictionary(string jsonStr)
{
Dictionary<string, string> dic = JsonConvert.DeserializeObject<Dictionary<string, string>>(jsonStr);
return dic;
}
}
}