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; }
}
posted @ 2020-01-09 17:16  wesson2019  阅读(379)  评论(0编辑  收藏  举报