文件帮助类

public class FileHelper
    {
        #region /*向客户端发送文件数据*/

        /// <summary>
        /// 向HTTP客户端传送文件
        /// </summary>
        /// <param name="ctx">HttpListenerContext对像</param>
        /// <param name="filePath">文件路径</param>
        /// <param name="fileName">文件名称</param>
        public void TransferToHttpClientFile(HttpListenerContext ctx, string filePath, string fileName)
        {
            FileStream fs = File.OpenRead(filePath); //待下载的文件
            long startPos = 0;
            string range = ctx.Request.Headers["Range"];
            bool isResume = string.IsNullOrEmpty(range);
            if (!isResume) //断点续传请求
            {
                //格式bytes=9216-
                startPos = long.Parse(range.Split('=')[1].Split('-')[0]);
                ctx.Response.StatusCode = 206;
                ctx.Response.ContentLength64 = fs.Length - startPos;
                fs.Position = startPos; //设置传送的起始位置
            }
            else
            {
                ctx.Response.ContentLength64 = fs.Length;
            }

            Console.WriteLine("request header");
            Console.WriteLine(ctx.Request.Headers.ToString());

            //设置返回内容的MIME类型
            //ctx.Response.ContentType = "application/octet-stream";
            //ctx.Response.AddHeader("Content-Disposition", "attachment;FileName=" + fileName);
            using (Stream output = ctx.Response.OutputStream)
            {
                try
                {
                    Console.WriteLine("response header");
                    Console.WriteLine(ctx.Response.Headers.ToString());

                    SendStream(fs, output); //文件传输
                    output.Close();
                }
                catch (HttpListenerException e) //在未写完所有文件时,如果客户端关闭连接,会抛此异常
                {
                    Console.WriteLine(e.Message);
                }
            }
            fs.Close();

        }

        /// <summary>
        /// 发送数据流
        /// </summary>
        /// <param name="fs">文件流</param>
        /// <param name="outStream">OutputStream对象</param>
        public void SendStream(Stream fs, Stream outStream)
        {
            byte[] buffer = new byte[1024];
            int read = 0;
            while ((read = fs.Read(buffer, 0, 1024)) > 0)
            {
                outStream.Write(buffer, 0, read);
                //System.Threading.Thread.Sleep(1000); //模拟慢速设备
            }
            if (fs != null)
            {
                fs.Close();
            }
            if (outStream != null)
            {
                outStream.Close();
            }
        }
        #endregion

        #region /*读取TXT文件*/

        /// <summary>
        /// 读取TXT文件
        /// </summary>
        /// <param name="filePath">TXT文件路径</param>
        /// <returns>List</returns>
        public static List<string> ReadLineTxt(string filePath)
        {
            return new List<string>(File.ReadAllLines(filePath,Encoding.Default));
        }

        #endregion

        #region /*字符串空格处理*/

        /// <summary>
        /// 向右添加空格
        /// </summary>
        /// <param name="str">string</param>
        /// <param name="len">int最大长度</param>
        /// <returns>string</returns>
        public static string AddRSpace(string str, int len)
        {
            int tmplen = len - GetLength(str);
            tmplen = tmplen >= 0 ? tmplen : 0;
            for (int i = 0; i < tmplen; i++)
            {
                str = str + " ";
            }
            return str;
        }

        /// <summary>
        /// 向左添加空格
        /// </summary>
        /// <param name="str">string</param>
        /// <param name="len">int最大长度</param>
        /// <returns>string</returns>
        public static string AddLSpace(string str, int len)
        {
            int tmplen = len - GetLength(str);
            tmplen = tmplen >= 0 ? tmplen : 0;
            for (int i = 0; i < tmplen; i++)
            {
                str = " " + str;
            }
            return str;
        }
        
        
        /// <summary>
        /// 取字符串长度
        /// 一个汉字算二个字符
        /// </summary>
        /// <param name="str">string字符串</param>
        /// <returns>int</returns>
        public static int GetLength(string str)
        {
            if (str.Length == 0) return 0;

            ASCIIEncoding ascii = new ASCIIEncoding();
            int tempLen = 0;
            byte[] s = ascii.GetBytes(str);
            for (int i = 0; i < s.Length; i++)
            {
                if ((int)s[i] == 63)
                {
                    tempLen += 2;
                }
                else
                {
                    tempLen += 1;
                }
            }

            return tempLen;
        }

        /// <summary>
        /// substring处理中文,让汉字二个字符的处理方法
        /// </summary>
        /// <param name="a_StartIndex"></param>
        /// <param name="a_Cnt"></param>
        /// <returns></returns>
        public static string SubStringExt(string s, int a_StartIndex, int a_Cnt)
        {
            byte[] l_byte = System.Text.Encoding.Default.GetBytes(s);
            return System.Text.Encoding.Default.GetString(l_byte, a_StartIndex, a_Cnt).Trim();
        }

        #endregion

    }
原文地址:https://www.cnblogs.com/skyblue/p/2395830.html