using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using Y.Utils.Net20.ListUtils;
namespace Y.Utils.Net20.FileUtils
{
public class FileTool
{
///
/// 获取文件(单层目录)
///
/// 路径
/// 通配符
///
public static List GetFile(string path, string pattern = "*")
{
List result = null;
if (Directory.Exists(path))
{
try
{
string[] list = Directory.GetFiles(path, pattern);
if (ListTool.HasElements(list))
result = new List(list);
}
catch (Exception e) { }
}
return result;
}
///
/// 获取文件(所有目录)
///
/// 路径
/// 通配符
///
public static List GetAllFile(string path, string pattern = "*")
{
List result = null;
try
{
string[] list = Directory.GetFiles(path, pattern, SearchOption.AllDirectories);
if (ListTool.HasElements(list))
result = new List(list);
}
catch (Exception e) { }
return result;
}
///
/// 获取文件(所有目录)
///
/// 路径
/// 通配符(支持多个通配符)
///
public static List GetAllFile(string path, string[] pattern)
{
List result = new List();
if (!ListTool.IsNullOrEmpty(pattern))
{
foreach (var p in pattern)
{
List temp = GetAllFile(path, p);
if (!ListTool.IsNullOrEmpty(temp)) result.AddRange(temp);
}
}
return result;
}
///
/// 获取文件(所有目录)
///
/// 路径(支持多个路径)
/// 通配符(支持多个通配符)
///
public static List GetAllFile(string[] paths, string[] patterns)
{
List result = new List();
if (!ListTool.IsNullOrEmpty(paths))
{
foreach (var path in paths)
{
if (!ListTool.IsNullOrEmpty(patterns))
{
foreach (var pattern in patterns)
{
List temp = GetAllFile(path, pattern);
if (!ListTool.IsNullOrEmpty(temp)) result.AddRange(temp);
}
}
else
{
List temp = GetAllFile(path);
if (!ListTool.IsNullOrEmpty(temp)) result.AddRange(temp);
}
}
}
return result;
}
///
/// 获取文件(所有目录)(严格模式:从第一个.开始截取后缀)
///
/// 路径(支持多个路径)
/// 通配符(支持多个通配符)
///
public static List GetAllFileByExt(List paths, List patterns)
{
List result = new List();
if (!ListTool.IsNullOrEmpty(paths))
{
foreach (var path in paths)
{
List temp = GetAllFile(path);
if (!ListTool.IsNullOrEmpty(temp)) result.AddRange(temp);
}
}
if (!ListTool.IsNullOrEmpty(patterns) && !ListTool.IsNullOrEmpty(result))
{
for (int i = result.Count - 1; i >= 0; i--)
{
string ext = Path.GetFileName(result[i]);
if (ext.IndexOf('.') >= 0)
{
ext = ext.Substring(ext.IndexOf('.'));
}
if (!patterns.Contains(ext)) result.RemoveAt(i);
}
}
return result;
}
///
/// 删除文件
///
/// 文件路径
///
public static bool Delete(string file)
{
try
{
if (File.Exists(file))
{
File.Delete(file);
return true;
}
else
{
return true;
}
}
catch { }
return false;
}
///
/// 删除文件(多个)
///
/// 文件路径(支持多个文件路径)
///
public static bool Delete(string[] files)
{
bool result = true;
if (!ListTool.IsNullOrEmpty(files))
{
foreach (var file in files)
{
result = result || Delete(file);
}
}
return result;
}
public static long Size(string fileName)
{
FileInfo fi = new FileInfo(fileName);
return fi.Length;
}
public static string SizeFormat(string fileName)
{
return SizeFormat(Size(fileName));
}
public static string SizeFormat(long size)
{
string rs = "";
if (size > 1024 * 1024 * 1024)
{
rs = Math.Round((double)size / 1024 / 1024 / 1024, 2) + " GB";
}
else if (size > 1024 * 1024)
{
rs = Math.Round((double)size / 1024 / 1024, 2) + " MB";
}
else if (size > 1024)
{
rs = Math.Round((double)size / 1024, 2) + " KB";
}
else
{
rs = size + " B";
}
return rs;
}
public static string SizeConvert(string fileName, string unit)
{
return SizeConvert(Size(fileName), unit);
}
public static string SizeConvert(long size, string unit)
{
double rs = 0;
switch (unit)
{
case "B": rs = (double)size; break;
case "KB": rs = (double)size / 1024; break;
case "MB": rs = (double)size / 1024 / 1024; break;
case "GB": rs = (double)size / 1024 / 1024 / 1024; break;
}
return Math.Round(rs, 2).ToString();
}
}
}