FileHelper 文件操作帮助类
文件大小
单位 | 说明 | 备注 |
---|---|---|
b | bit | 位 |
B | byte | 字节 1B=8b |
KB | kilobyte | 1KB=1024B |
MB | megabyte | |
GB | gigabytes | |
TB | terabytes | |
PB | petabytes | |
FileHelper
/// <summary>
/// 文件帮助类
/// </summary>
public class FileHelper
{
public const long CONSTANT_KB = 1024;
public const long CONSTANT_MB = CONSTANT_KB * 1024;
public const long CONSTANT_GB = CONSTANT_MB * 1024;
public const long CONSTANT_TB = CONSTANT_GB * 1024;
/// <summary>
/// 缓存大小
/// </summary>
public const int CACHESIZE = 81920;
public FileEntity FileInfo { get; set; } = new FileEntity();
public FileHelper(string fileAddress)
{
if (string.IsNullOrEmpty(fileAddress))
{
throw new ArgumentException($"“{nameof(fileAddress)}”不能是 Null 或为空", nameof(fileAddress));
}
GetFileEntity(fileAddress);
}
public FileHelper(HttpRequest request)
{
if (request is null)
{
throw new ArgumentNullException(nameof(request));
}
// 完整的请求地址
var url = new StringBuilder()
.Append(request.Scheme)
.Append("://")
.Append(request.Host)
.Append(request.PathBase)
.Append(request.Path)
.Append(request.QueryString)
.ToString();
GetFileEntity(url);
}
private void GetFileEntity(string address)
{
if (File.Exists(address))
{
FileInfo fi = new FileInfo(address);
FileInfo.FileName = fi.Name;
FileInfo.Lenth = fi.Length;
FileInfo.LenthName = GetFileSizeString(fi.Length);
FileInfo.MD5 = Md5Helper.GetMD5(address);
return;
}
try
{
var req = (HttpWebRequest)WebRequest.CreateDefault(new Uri(address));
req.Method = "HEAD";
req.Timeout = 1000;
using (var response = (HttpWebResponse)req.GetResponse())
{
if (response.StatusCode == HttpStatusCode.OK)
{
FileInfo.Lenth = response.ContentLength;
FileInfo.Encoding = Encoding.GetEncoding(response.ContentEncoding);
var fileName = response.Headers["Content-Disposition"]; // attachment;filename=**
if (string.IsNullOrEmpty(fileName))
{
fileName = response.ResponseUri.Segments[response.ResponseUri.Segments.Length - 1];
}
else
{
fileName = fileName.Remove(0, fileName.IndexOf("filename=") + 9);
}
FileInfo.FileName = fileName;
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
读文件
var filePath = @"D:\123456.txt";
using (var sr = new StreamReader(filePath, Encoding.UTF8))
{
while (sr.Peek() > 0)
{
var line = await sr.ReadLineAsync();
var arr = line.Split('\t');
if (arr.Length == 3)
{
// TODO
}
}
}
简单写日志
/// <summary>
/// 简单写日志信息
/// </summary>
/// <param name="fileName"></param>
/// <param name="msg"></param>
public void WriteLog(string fileName, string msg)
{
try
{
using (var sw = File.AppendText(fileName))
{
sw.WriteLine(string.Format("{0}; {1}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss,FFF"), msg));
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
高速写日志,可借助log4net实现。
获取文件大小
/// <summary>
/// 获取文件大小(1 KB,2 MB,3 GB,4 TB)
/// </summary>
/// <param name="fileName">文件路径</param>
/// <returns></returns>
public string GetFileSizeString(string fileName)
{
if (!File.Exists(fileName))
{
return string.Empty;
}
FileInfo fi = new FileInfo(fileName);
return GetFileSizeString(fi.Length);
}
/// <summary>
/// 获取文件大小(1 KB,2 MB,3 GB,4 TB)
/// </summary>
/// <param name="size">文件大小(以字节为单位)</param>
/// <returns></returns>
private string GetFileSizeString(long size)
{
if (size < 0)
{
return "Error!";
}
if (CONSTANT_KB > size)
{
return string.Format("{0} B", size);
}
else if (CONSTANT_MB > size)
{
return string.Format("{0} KB", size / CONSTANT_KB);
}
else if (CONSTANT_GB > size)
{
return string.Format("{0} MB", size / CONSTANT_MB);
}
else if (CONSTANT_TB > size)
{
return string.Format("{0} GB", size / CONSTANT_GB);
}
else
{
return string.Format("{0} TB", size / CONSTANT_TB);
}
}
流存储
/// <summary>
/// 写文件到指定目录
/// </summary>
/// <param name="stream">内存流</param>
/// <param name="path">文件保存路径</param>
/// <param name="outTime">超时取消时间(ms)</param>
/// <returns>若成功,返回文件保存路径</returns>
public async Task<string> WriteFileAsync(Stream stream, string path, int outTime)
{
try
{
int length = 81920;
int writeSum = 0;
using (var cts = new CancellationTokenSource(outTime))
{
using (FileStream fileStream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.Write, length, FileOptions.Asynchronous))
{
byte[] arr = new byte[length];
int readCount = 0;
while ((readCount = await stream.ReadAsync(arr, 0, arr.Length)) != 0)
{
await fileStream.WriteAsync(arr, 0, readCount);
writeSum += readCount;
}
}
}
if (writeSum > 0)
{
return path;
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
return string.Empty;
}
文件名称
string filePath = "C:\\test.txt";
// 获取文件的名称(没有后缀) test
Path.GetFileNameWithoutExtension(filePath);
// 获取文件的名称(有后缀) text.txt
Path.GetFileName(filePath);
// 获取文件的扩展名称 .txt
Path.GetExtension(filePath);
FileContentTypeHelper
public static class FileContentTypeHelper
{
/// <summary>
/// 获取文件的Content-Type(MIME Type)
/// </summary>
/// <param name="extension"></param>
/// <returns></returns>
public static string GetMimeType(string extension)
{
if (string.IsNullOrEmpty(extension))
{
throw new ArgumentException($"“{nameof(extension)}”不能是 Null 或为空", nameof(extension));
}
if (!extension.StartsWith("."))
{
extension += ".";
}
return _mapping.TryGetValue(extension, out string rslt) ? rslt : "application/octet-stream";
}
#region HTTP Content-Type
private static IDictionary<string, string> _mapping = new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase)
{
{ ".*", "application/octet-stream" },
{ ".001", "application/x-001" },
{ ".301", "application/x-301" },
{ ".323", "text/h323" },
{ ".906", "application/x-906" },
{ ".907", "drawing/907" },
{ ".a11", "application/x-a11" },
{ ".acp", "audio/x-mei-aac" },
{ ".ai", "application/postscript" },
{ ".aif", "audio/aiff" },
{ ".aifc", "audio/aiff" },
{ ".aiff", "audio/aiff" },
{ ".anv", "application/x-anv" },
{ ".asa", "text/asa" },
{ ".asf", "video/x-ms-asf" },
{ ".asp", "text/asp" },
{ ".asx", "video/x-ms-asf" },
{ ".au", "audio/basic" },
{ ".avi", "video/avi" },
{ ".awf", "application/vnd.adobe.workflow" },
{ ".biz", "text/xml" },
{ ".bmp", "application/x-bmp" },
{ ".bot", "application/x-bot" },
{ ".c4t", "application/x-c4t" },
{ ".c90", "application/x-c90" },
{ ".cal", "application/x-cals" },
{ ".cat", "application/vnd.ms-pki.seccat" },
{ ".cdf", "application/x-netcdf" },
{ ".cdr", "application/x-cdr" },
{ ".cel", "application/x-cel" },
{ ".cer", "application/x-x509-ca-cert" },
{ ".cg4", "application/x-g4" },
{ ".cgm", "application/x-cgm" },
{ ".cit", "application/x-cit" },
{ ".class", "java/*" },
{ ".cml", "text/xml" },
{ ".cmp", "application/x-cmp" },
{ ".cmx", "application/x-cmx" },
{ ".cot", "application/x-cot" },
{ ".crl", "application/pkix-crl" },
{ ".crt", "application/x-x509-ca-cert" },
{ ".csi", "application/x-csi" },
{ ".css", "text/css" },
{ ".cut", "application/x-cut" },
{ ".dbf", "application/x-dbf" },
{ ".dbm", "application/x-dbm" },
{ ".dbx", "application/x-dbx" },
{ ".dcd", "text/xml" },
{ ".dcx", "application/x-dcx" },
{ ".der", "application/x-x509-ca-cert" },
{ ".dgn", "application/x-dgn" },
{ ".dib", "application/x-dib" },
{ ".dll", "application/x-msdownload" },
{ ".doc", "application/msword" },
{ ".dot", "application/msword" },
{ ".drw", "application/x-drw" },
{ ".dtd", "text/xml" },
{ ".dwf", "Model/vnd.dwf" },
{ ".dwf", "application/x-dwf" },
{ ".dwg", "application/x-dwg" },
{ ".dxb", "application/x-dxb" },
{ ".dxf", "application/x-dxf" },
{ ".edn", "application/vnd.adobe.edn" },
{ ".emf", "application/x-emf" },
{ ".eml", "message/rfc822" },
{ ".ent", "text/xml" },
{ ".epi", "application/x-epi" },
{ ".eps", "application/x-ps" },
{ ".eps", "application/postscript" },
{ ".etd", "application/x-ebx" },
{ ".exe", "application/x-msdownload" },
{ ".fax", "image/fax" },
{ ".fdf", "application/vnd.fdf" },
{ ".fif", "application/fractals" },
{ ".fo", "text/xml" },
{ ".frm", "application/x-frm" },
{ ".g4", "application/x-g4" },
{ ".gbr", "application/x-gbr" },
{ ".", "application/x-" },
{ ".gif", "image/gif" },
{ ".gl2", "application/x-gl2" },
{ ".gp4", "application/x-gp4" },
{ ".hgl", "application/x-hgl" },
{ ".hmr", "application/x-hmr" },
{ ".hpg", "application/x-hpgl" },
{ ".hpl", "application/x-hpl" },
{ ".hqx", "application/mac-binhex40" },
{ ".hrf", "application/x-hrf" },
{ ".hta", "application/hta" },
{ ".htc", "text/x-component" },
{ ".htm", "text/html" },
{ ".html", "text/html" },
{ ".htt", "text/webviewhtml" },
{ ".htx", "text/html" },
{ ".icb", "application/x-icb" },
{ ".ico", "image/x-icon" },
{ ".ico", "application/x-ico" },
{ ".iff", "application/x-iff" },
{ ".ig4", "application/x-g4" },
{ ".igs", "application/x-igs" },
{ ".iii", "application/x-iphone" },
{ ".img", "application/x-img" },
{ ".ins", "application/x-internet-signup" },
{ ".isp", "application/x-internet-signup" },
{ ".IVF", "video/x-ivf" },
{ ".java", "java/*" },
{ ".jfif", "image/jpeg" },
{ ".jpe", "image/jpeg" },
{ ".jpe", "application/x-jpe" },
{ ".jpeg", "image/jpeg" },
{ ".jpg", "image/jpeg" },
{ ".jpg", "application/x-jpg" },
{ ".js", "application/x-javascript" },
{ ".jsp", "text/html" },
{ ".la1", "audio/x-liquid-file" },
{ ".lar", "application/x-laplayer-reg" },
{ ".latex", "application/x-latex" },
{ ".lavs", "audio/x-liquid-secure" },
{ ".lbm", "application/x-lbm" },
{ ".lmsff", "audio/x-la-lms" },
{ ".ls", "application/x-javascript" },
{ ".ltr", "application/x-ltr" },
{ ".m1v", "video/x-mpeg" },
{ ".m2v", "video/x-mpeg" },
{ ".m3u", "audio/mpegurl" },
{ ".m4e", "video/mpeg4" },
{ ".mac", "application/x-mac" },
{ ".man", "application/x-troff-man" },
{ ".math", "text/xml" },
{ ".mdb", "application/msaccess" },
{ ".mdb", "application/x-mdb" },
{ ".mfp", "application/x-shockwave-flash" },
{ ".mht", "message/rfc822" },
{ ".mhtml", "message/rfc822" },
{ ".mi", "application/x-mi" },
{ ".mid", "audio/mid" },
{ ".midi", "audio/mid" },
{ ".mil", "application/x-mil" },
{ ".mml", "text/xml" },
{ ".mnd", "audio/x-musicnet-download" },
{ ".mns", "audio/x-musicnet-stream" },
{ ".mocha", "application/x-javascript" },
{ ".movie", "video/x-sgi-movie" },
{ ".mp1", "audio/mp1" },
{ ".mp2", "audio/mp2" },
{ ".mp2v", "video/mpeg" },
{ ".mp3", "audio/mp3" },
{ ".mp4", "video/mpeg4" },
{ ".mpa", "video/x-mpg" },
{ ".mpd", "application/vnd.ms-project" },
{ ".mpe", "video/x-mpeg" },
{ ".mpeg", "video/mpg" },
{ ".mpg", "video/mpg" },
{ ".mpga", "audio/rn-mpeg" },
{ ".mpp", "application/vnd.ms-project" },
{ ".mps", "video/x-mpeg" },
{ ".mpt", "application/vnd.ms-project" },
{ ".mpv", "video/mpg" },
{ ".mpv2", "video/mpeg" },
{ ".mpw", "application/vnd.ms-project" },
{ ".mpx", "application/vnd.ms-project" },
{ ".mtx", "text/xml" },
{ ".mxp", "application/x-mmxp" },
{ ".net", "image/pnetvue" },
{ ".nrf", "application/x-nrf" },
{ ".nws", "message/rfc822" },
{ ".odc", "text/x-ms-odc" },
{ ".out", "application/x-out" },
{ ".p10", "application/pkcs10" },
{ ".p12", "application/x-pkcs12" },
{ ".p7b", "application/x-pkcs7-certificates" },
{ ".p7c", "application/pkcs7-mime" },
{ ".p7m", "application/pkcs7-mime" },
{ ".p7r", "application/x-pkcs7-certreqresp" },
{ ".p7s", "application/pkcs7-signature" },
{ ".pc5", "application/x-pc5" },
{ ".pci", "application/x-pci" },
{ ".pcl", "application/x-pcl" },
{ ".pcx", "application/x-pcx" },
{ ".pdf", "application/pdf" },
{ ".pdf", "application/pdf" },
{ ".pdx", "application/vnd.adobe.pdx" },
{ ".pfx", "application/x-pkcs12" },
{ ".pgl", "application/x-pgl" },
{ ".pic", "application/x-pic" },
{ ".pko", "application/vnd.ms-pki.pko" },
{ ".pl", "application/x-perl" },
{ ".plg", "text/html" },
{ ".pls", "audio/scpls" },
{ ".plt", "application/x-plt" },
{ ".png", "image/png" },
{ ".png", "application/x-png" },
{ ".pot", "application/vnd.ms-powerpoint" },
{ ".ppa", "application/vnd.ms-powerpoint" },
{ ".ppm", "application/x-ppm" },
{ ".pps", "application/vnd.ms-powerpoint" },
{ ".ppt", "application/vnd.ms-powerpoint" },
{ ".ppt", "application/x-ppt" },
{ ".pr", "application/x-pr" },
{ ".prf", "application/pics-rules" },
{ ".prn", "application/x-prn" },
{ ".prt", "application/x-prt" },
{ ".ps", "application/x-ps" },
{ ".ps", "application/postscript" },
{ ".ptn", "application/x-ptn" },
{ ".pwz", "application/vnd.ms-powerpoint" },
{ ".r3t", "text/vnd.rn-realtext3d" },
{ ".ra", "audio/vnd.rn-realaudio" },
{ ".ram", "audio/x-pn-realaudio" },
{ ".ras", "application/x-ras" },
{ ".rat", "application/rat-file" },
{ ".rdf", "text/xml" },
{ ".rec", "application/vnd.rn-recording" },
{ ".red", "application/x-red" },
{ ".rgb", "application/x-rgb" },
{ ".rjs", "application/vnd.rn-realsystem-rjs" },
{ ".rjt", "application/vnd.rn-realsystem-rjt" },
{ ".rlc", "application/x-rlc" },
{ ".rle", "application/x-rle" },
{ ".rm", "application/vnd.rn-realmedia" },
{ ".rmf", "application/vnd.adobe.rmf" },
{ ".rmi", "audio/mid" },
{ ".rmj", "application/vnd.rn-realsystem-rmj" },
{ ".rmm", "audio/x-pn-realaudio" },
{ ".rmp", "application/vnd.rn-rn_music_package" },
{ ".rms", "application/vnd.rn-realmedia-secure" },
{ ".rmvb", "application/vnd.rn-realmedia-vbr" },
{ ".rmx", "application/vnd.rn-realsystem-rmx" },
{ ".rnx", "application/vnd.rn-realplayer" },
{ ".rp", "image/vnd.rn-realpix" },
{ ".rpm", "audio/x-pn-realaudio-plugin" },
{ ".rsml", "application/vnd.rn-rsml" },
{ ".rt", "text/vnd.rn-realtext" },
{ ".rtf", "application/msword" },
{ ".rtf", "application/x-rtf" },
{ ".rv", "video/vnd.rn-realvideo" },
{ ".sam", "application/x-sam" },
{ ".sat", "application/x-sat" },
{ ".sdp", "application/sdp" },
{ ".sdw", "application/x-sdw" },
{ ".sit", "application/x-stuffit" },
{ ".slb", "application/x-slb" },
{ ".sld", "application/x-sld" },
{ ".slk", "drawing/x-slk" },
{ ".smi", "application/smil" },
{ ".smil", "application/smil" },
{ ".smk", "application/x-smk" },
{ ".snd", "audio/basic" },
{ ".sol", "text/plain" },
{ ".sor", "text/plain" },
{ ".spc", "application/x-pkcs7-certificates" },
{ ".spl", "application/futuresplash" },
{ ".spp", "text/xml" },
{ ".ssm", "application/streamingmedia" },
{ ".sst", "application/vnd.ms-pki.certstore" },
{ ".stl", "application/vnd.ms-pki.stl" },
{ ".stm", "text/html" },
{ ".sty", "application/x-sty" },
{ ".svg", "text/xml" },
{ ".swf", "application/x-shockwave-flash" },
{ ".tdf", "application/x-tdf" },
{ ".tg4", "application/x-tg4" },
{ ".tga", "application/x-tga" },
{ ".tif", "image/tiff" },
{ ".tif", "application/x-tif" },
{ ".tiff", "image/tiff" },
{ ".tld", "text/xml" },
{ ".top", "drawing/x-top" },
{ ".torrent", "application/x-bittorrent" },
{ ".tsd", "text/xml" },
{ ".txt", "text/plain" },
{ ".uin", "application/x-icq" },
{ ".uls", "text/iuls" },
{ ".vcf", "text/x-vcard" },
{ ".vda", "application/x-vda" },
{ ".vdx", "application/vnd.visio" },
{ ".vml", "text/xml" },
{ ".vpg", "application/x-vpeg005" },
{ ".vsd", "application/vnd.visio" },
{ ".vsd", "application/x-vsd" },
{ ".vss", "application/vnd.visio" },
{ ".vst", "application/vnd.visio" },
{ ".vst", "application/x-vst" },
{ ".vsw", "application/vnd.visio" },
{ ".vsx", "application/vnd.visio" },
{ ".vtx", "application/vnd.visio" },
{ ".vxml", "text/xml" },
{ ".wav", "audio/wav" },
{ ".wax", "audio/x-ms-wax" },
{ ".wb1", "application/x-wb1" },
{ ".wb2", "application/x-wb2" },
{ ".wb3", "application/x-wb3" },
{ ".wbmp", "image/vnd.wap.wbmp" },
{ ".wiz", "application/msword" },
{ ".wk3", "application/x-wk3" },
{ ".wk4", "application/x-wk4" },
{ ".wkq", "application/x-wkq" },
{ ".wks", "application/x-wks" },
{ ".wm", "video/x-ms-wm" },
{ ".wma", "audio/x-ms-wma" },
{ ".wmd", "application/x-ms-wmd" },
{ ".wmf", "application/x-wmf" },
{ ".wml", "text/vnd.wap.wml" },
{ ".wmv", "video/x-ms-wmv" },
{ ".wmx", "video/x-ms-wmx" },
{ ".wmz", "application/x-ms-wmz" },
{ ".wp6", "application/x-wp6" },
{ ".wpd", "application/x-wpd" },
{ ".wpg", "application/x-wpg" },
{ ".wpl", "application/vnd.ms-wpl" },
{ ".wq1", "application/x-wq1" },
{ ".wr1", "application/x-wr1" },
{ ".wri", "application/x-wri" },
{ ".wrk", "application/x-wrk" },
{ ".ws", "application/x-ws" },
{ ".ws2", "application/x-ws" },
{ ".wsc", "text/scriptlet" },
{ ".wsdl", "text/xml" },
{ ".wvx", "video/x-ms-wvx" },
{ ".xdp", "application/vnd.adobe.xdp" },
{ ".xdr", "text/xml" },
{ ".xfd", "application/vnd.adobe.xfd" },
{ ".xfdf", "application/vnd.adobe.xfdf" },
{ ".xhtml", "text/html" },
{ ".xls", "application/vnd.ms-excel" },
{ ".xls", "application/x-xls" },
{ ".xlw", "application/x-xlw" },
{ ".xml", "text/xml" },
{ ".xpl", "audio/scpls" },
{ ".xq", "text/xml" },
{ ".xql", "text/xml" },
{ ".xquery","text/xml" },
{ ".xsd", "text/xml" },
{ ".xsl", "text/xml" },
{ ".xslt", "text/xml" },
{ ".xwd", "aplication/x-xwd" },
{ ".x_b", "application/x-x_b" },
{ ".sis", "application/vnd.symbian.install" },
{ ".sisx", "application/vnd.symbian.install" },
{ ".x_t", "application/x-x_t" },
{ ".ipa", "application/vnd.iphone" },
{ ".apk", "application/vnd.android.package-archive" },
{ ".xap", "application/x-silverlight-app" },
};
#endregion
}
FileEntity
/// <summary>
/// 文件基本信息
/// </summary>
public class FileEntity
{
/// <summary>
/// 文件名称
/// </summary>
public string FileName { get; set; }
/// <summary>
/// 编码类型
/// </summary>
public System.Text.Encoding Encoding { get; set; } = System.Text.Encoding.UTF8;
/// <summary>
/// MD5
/// </summary>
public string MD5 { get; set; }
/// <summary>
/// 文件长度
/// </summary>
public long Lenth { get; set; }
/// <summary>
/// 文件长度(带单位)
/// </summary>
public string LenthName { get; set; }
}