C# windows文件操作类FileHepler

@C# windows文件操作类FileHepler

C# windows文件操作类FileHepler

在C#对文件操作的时候,在百度和必应上搜索很多资料,但是没有一个很完善操作Windows文件的FileHepler类,其他同学写的难免有些差强人意,之后自己想写一个完善的Windows 文件操作类FileHepler。这些方法奉献给大家,所有方法都经过验证,可以放心使用。如果其中有需要探讨的,给我留言即可。

FileHepler操作类引用说明

1.文章的大部分类容是从https://cloud.tencent.com/developer/article/1343230这里看到的,本人在上面增加了几个方法和优化返回内容;
2.对于所有的方法,本人已经经过验证,可以放心使用;
3.如果觉得这个FileHepler还可以了,想给我点赞的同时,请不要忘了给我引用"跟着阿笨一起玩NET"点赞,谢谢;
4.具体的验证我上传到CSDN,0币下载,下载链接FileHelper操作类下载
5.我准备写一个完整的FtpHepler操作类,大家如果有兴趣到时可以看一下

主要方法

Windows几个主要的方法

  1. 递归获取Windows目录下的文件和文件夹,返回一个元组
  2. ASP.NET上传文件的方法
  3. 判断文件是否存在
  4. 判断文件名是否为浏览器可以直接显示的图片文件名
  5. 复制当前目录的所有文件
  6. 剪切/移动指定目录的所有文件
  7. 删除指定目录的所有文件和子目录
  8. 删除指定目录下的指定文件
  9. 创建指定目录
  10. 建立子目录
  11. 重命名文件夹
  12. 删除指定目录
  13. 检测目录是否存在
  14. 删除指定目录的所有子目录,不包括对当前目录文件的删除
  15. 获取文件最后修改时间
  16. 重命名文件
  17. 返回指定路径的文件的扩展名
  18. 判断是否是隐藏文件
  19. 以只读方式读取文本文件
  20. 将内容写入文本文件
  21. 获取本地驱动器名列表
  22. 获取应用程序当前可执行文件的路径
  23. 获取文件大小并以B,KB,GB,TB方式表示[+2 重载]
  24. Http下载文件

主要截图

1.下载界面,0币下载
在这里插入图片描述

2.验证功能界面
验证功能界面
3.FileHepler内容
在这里插入图片描述
在这里插入图片描述

代码内容

	/// <summary>
    /// Windows-File实体操作类
    /// </summary>
    public class FilesHelper
    {
        public Dictionary<string, string> directorys = new Dictionary<string, string>();
        public List<string> lists = new List<string>();
        OperationResult operation = new OperationResult();
        public int count = 1;
        public string counts;
        bool flag;

        #region 递归获取Windows目录下的文件和文件夹,返回一个元组
        /// <summary>
        /// 递归获取Windows目录下的文件和文件夹
        /// </summary>
        /// <param name="sourcePath">文件绝对路径</param>
        /// <returns></returns>
        public Tuple<OperationResult, List<string>, Dictionary<string, string>> GetDirectoryAndFile(string sourcePath)
        {
            GetDirectory(sourcePath);
            if (lists.Count > 0)
            {
                operation.isOk = true;
                operation.returnValue = "获取递归文件夹和文件列表成功";
                return new Tuple<OperationResult, List<string>, Dictionary<string, string>>(operation, lists, directorys);
            }
            operation.isOk = false;
            operation.returnValue = "获取递归文件夹和文件列表失败";
            return new Tuple<OperationResult, List<string>, Dictionary<string, string>>(operation, lists, directorys);
        }

        /// <summary>
        /// 递归获取Windows目录下的文件和文件夹
        /// </summary>
        /// <param name="sourcePath">文件绝对路径</param>
        private void GetDirectory(string sourcePath)
        {
            try
            {
                //判断源文件夹是否存在
                if (Directory.Exists(sourcePath))
                {
                    //获取源文件夹中的目录及文件路径,存入字符串
                    string[] tmp = Directory.GetFileSystemEntries(sourcePath);
                    //循环遍历
                    for (int i = 0; i < tmp.Length; i++)
                    {
                        //如果是文件则存入FileList
                        if (File.Exists(tmp[i]))
                        {
                            counts = (++count).ToString();
                            lists.Add(sourcePath);
                            directorys.Add(counts, tmp[i]);
                        }
                        else
                        {
                            GetDirectory(tmp[i]);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                return;
            }
        }
        #endregion


        #region 工具方法:ASP.NET上传文件的方法
        /// <summary>
        /// 工具方法:上传文件的方法
        /// </summary>
        /// <param name="myFileUpload">上传控件的ID</param>
        /// <param name="allowExtensions">允许上传的扩展文件名类型,如:string[] allowExtensions = { ".doc", ".xls", ".ppt", ".jpg", ".gif" };</param>
        /// <param name="maxLength">允许上传的最大大小,以M为单位</param>
        /// <param name="savePath">保存文件的目录,注意是绝对路径,如:Server.MapPath("~/upload/");</param>
        /// <param name="saveName">保存的文件名,如果是""则以原文件名保存</param>
        public OperationResult FilesUpload(FileUpload myFileUpload,string[] allowExtensions,int maxLength,string savePath,string saveName)
        {
            //文件格式是否允许上传
            bool fileAllow = false;
            //检查是否有文件案
            if (myFileUpload.HasFile)
            {
                //检查文件大小, ContentLength获取的是字节,转成M的时候要除以2次1024
                if (myFileUpload.PostedFile.ContentLength / 1024 / 1024 >= maxLength)
                {
                    operation.isOk = false;
                    operation.tRes = "只能上传小于" + maxLength.ToString() + "的文件!";
                    return operation;
                }
                //取得上传文件之扩展文件名,并转换成小写字母
                string fileExtension = System.IO.Path.GetExtension(myFileUpload.FileName).ToLower();
                string tmp = "";   // 存储允许上传的文件后缀名
                //检查扩展文件名是否符合限定类型
                for (int i = 0; i < allowExtensions.Length; i++)
                {
                    tmp += i == allowExtensions.Length - 1 ? allowExtensions[i] : allowExtensions[i] + ",";
                    if (fileExtension == allowExtensions[i])
                    {
                        fileAllow = true;
                    }
                }
                if (fileAllow)
                {
                    try
                    {
                        string path = savePath + (saveName == "" ? myFileUpload.FileName : saveName);
                        //存储文件到文件夹
                        myFileUpload.SaveAs(path);
                    }
                    catch (Exception ex)
                    {
                        operation.isOk = false;
                        operation.tRes = "文件上传错误,错误原因:" + ex.ToString();
                        return operation;
                    }
                }
                else
                {
                    operation.isOk = false;
                    operation.tRes="文件格式不符,可以上传的文件格式为:" + tmp;
                    return operation;
                }
            }
            else
            {
                operation.isOk = false;
                operation.tRes = "请选择要上传的文件!";
                return operation;
            }
            operation.isOk = true;
            operation.tRes = "文件上传成功!";
            return operation;
        }
        #endregion


        #region 返回文件是否存在
        /// <summary>
        /// 返回文件是否存在
        /// </summary>
        /// <param name="SouthPath">文件地址</param>
        /// <returns>是否存在</returns>
        public OperationResult FileExists(string SouthPath)
        {
            flag = System.IO.File.Exists(SouthPath);
            if (flag)
            {
                operation.tRes = "文件存在!";
            }
            else {
                operation.tRes = "文件不存在!";
            }
            operation.isOk = flag;
            return operation;
        }
        #endregion


        #region 判断文件名是否为浏览器可以直接显示的图片文件名
        /// <summary>
        /// 判断文件名是否为浏览器可以直接显示的图片文件名
        /// </summary>
        /// <param name="filename">文件名</param>
        /// <returns>是否可以直接显示</returns>
        public OperationResult IsImgFilename(string filename)
        {
            filename = filename.Trim();
            if (filename.EndsWith(".") || filename.IndexOf(".") == -1)
            {
                operation.isOk = false;
                operation.tRes = "文件不可以直接显示!";
                return operation;
            }
            string extname = filename.Substring(filename.LastIndexOf(".") + 1).ToLower();
            flag = (extname == "jpg" || extname == "jpeg" || extname == "png" || extname == "bmp" || extname == "gif");
            if (flag) 
            {
                operation.tRes = "文件可以直接显示!";
            }
            operation.isOk = flag;
            operation.tRes = "文件不可以直接显示!";
            return operation;
        }
        #endregion


        #region 复制当前目录的所有文件
        /// <summary>
        /// 复制当前目录的所有文件
        /// </summary>
        /// <param name="sourceDir">原始目录</param>
        /// <param name="targetDir">目标目录</param>
        /// <param name="overWrite">如果为true,覆盖同名文件,否则不覆盖</param>
        /// <param name="copySubDir">如果为true,包含子目录,否则不包含</param>
        public OperationResult CopyAllFiles(string sourceDir, string targetDir, bool overWrite, bool copySubDir)
        {
            //目录不存在首先创建目录
            if (!Directory.Exists(targetDir))
            {
                Directory.CreateDirectory(targetDir);
            }
            try
            {
                //辅助当前目录文件
                foreach (string sourceFileName in Directory.GetFiles(sourceDir))
                {
                    string targetFileName = Path.Combine(targetDir, sourceFileName.Substring(sourceFileName.LastIndexOf('\\') + 1));

                    if (File.Exists(targetFileName))
                    {
                        if (overWrite == true)
                        {
                            File.SetAttributes(targetFileName, FileAttributes.Normal);
                            File.Copy(sourceFileName, targetFileName, overWrite);
                        }
                    }
                    else
                    {
                        File.Copy(sourceFileName, targetFileName, overWrite);
                    }
                }
                if (copySubDir)
                {
                    foreach (string sourceSubDir in Directory.GetDirectories(sourceDir))
                    {
                        string targetSubDir = Path.Combine(targetDir, sourceSubDir.Substring(sourceSubDir.LastIndexOf('\\') + 1));
                        if (!Directory.Exists(targetSubDir))
                        {
                            Directory.CreateDirectory(targetSubDir);
                        }
                        CopyAllFiles(sourceSubDir, targetSubDir, overWrite, true);
                    }
                }
                operation.isOk = true;
                operation.returnValue = string.Format("复制目录 {0}的文件到目录 {1}成功,总计复制{2}个文件!", sourceDir, targetDir, count.ToString());
            }
            catch (Exception ex)
            {
                operation.isOk = false;
                operation.returnValue = string.Format("复制目录 {0}的文件到目录 {1}失败,失败原因:{3}!", sourceDir, targetDir, ex.ToString());
            }
            return operation;
        }
        #endregion


        #region 剪切/移动指定目录的所有文件
        /// <summary>
        /// 移动当前目录的文件
        /// </summary>
        /// <param name="sourceDir">原始目录</param>
        /// <param name="targetDir">目标目录</param>
        /// <param name="overWrite">如果为true,覆盖同名文件,否则不覆盖</param>
        /// <param name="moveSubDir">如果为true,包含目录,否则不包含</param>
        public OperationResult MoveFiles(string sourceDir, string targetDir, bool overWrite, bool moveSubDir)
        {
            //目录不存在首先创建目录
            if (!Directory.Exists(targetDir))
            {
                Directory.CreateDirectory(targetDir);
            }
            try
            {
                //移动当前目录文件
                foreach (string sourceFileName in Directory.GetFiles(sourceDir))
                {
                    string targetFileName = Path.Combine(targetDir, sourceFileName.Substring(sourceFileName.LastIndexOf('\\') + 1));
                    if (File.Exists(targetFileName))
                    {
                        if (overWrite == true)
                        {
                            File.SetAttributes(targetFileName, FileAttributes.Normal);
                            File.Delete(targetFileName);
                            File.Move(sourceFileName, targetFileName);
                        }
                    }
                    else
                    {
                        File.Move(sourceFileName, targetFileName);
                    }
                }
                if (moveSubDir)
                {
                    foreach (string sourceSubDir in Directory.GetDirectories(sourceDir))
                    {
                        string targetSubDir = Path.Combine(targetDir, sourceSubDir.Substring(sourceSubDir.LastIndexOf('\\') + 1));
                        if (!Directory.Exists(targetSubDir))
                        {
                            Directory.CreateDirectory(targetSubDir);
                        }    
                        MoveFiles(sourceSubDir, targetSubDir, overWrite, true);
                        Directory.Delete(sourceSubDir);
                    }
                }
                operation.isOk = true;
                operation.returnValue = string.Format("移动目录 {0}的所有文件到目录 {1}成功!", sourceDir, targetDir);
            }
            catch (Exception ex) 
            {
                operation.isOk = false;
                operation.returnValue = string.Format("移动目录 {0}的所有文件到目录 {1}失败,失败原因:{3}!", sourceDir, targetDir, ex.ToString());
            }
            return operation;
        }
        #endregion


        #region 删除指定目录的所有文件和子目录
        /// <summary>
        /// 删除指定目录的所有文件和子目录
        /// </summary>
        /// <param name="TargetDir">操作目录</param>
        /// <param name="delSubDir">如果为true,包含对子目录的操作</param>
        public OperationResult DeleteDirectoryFiles(string TargetDir,bool delSubDir)
        {   
            //判断目录是否存在
            flag = Directory.Exists(TargetDir);
            try
            {
                if (flag)
                {
                    foreach (string fileName in Directory.GetFiles(TargetDir))
                    {
                        File.SetAttributes(fileName, FileAttributes.Normal);
                        File.Delete(fileName);
                    }
                    if (delSubDir)
                    {
                        DirectoryInfo dir = new DirectoryInfo(TargetDir);
                        foreach (DirectoryInfo subDi in dir.GetDirectories())
                        {
                            DeleteDirectoryFiles(subDi.FullName, true);
                            subDi.Delete();
                        }
                    }
                    operation.returnValue = string.Format("删除目录 {0} 下的文件成功", TargetDir);
                }
            }
            catch (Exception ex) 
            {
                operation.returnValue = string.Format("删除目录 {0} 下的文件失败", TargetDir);
            }
            operation.isOk = flag;
            return operation;
        }
        #endregion


        #region 删除指定目录下的指定文件
        /// <summary>
        /// 删除文件
        /// </summary>
        /// <param name="sourcePath">文件路径</param>
        public OperationResult DeleteFiles(string sourcePath)
        {
            //判断目录是否存在
            flag = File.Exists(sourcePath);
            try
            {
                if (flag)
                {
                    File.Delete(sourcePath);
                }
                operation.isOk = true;
                operation.returnValue = string.Format("删除路径 {0} 下的文件成功", sourcePath);
            }
            catch (Exception ex) 
            {
                operation.isOk = false;
                operation.returnValue = string.Format("删除路径 {0} 下的文件失败,失败原因:{1}", sourcePath, ex.ToString());
            }
            return operation;
        }
        #endregion


        #region 创建指定目录
        /// <summary>
        /// 创建指定目录
        /// </summary>
        /// <param name="targetDir"></param>
        public OperationResult CreateDirectory(string targetDir)
        {
            DirectoryInfo dir = new DirectoryInfo(targetDir);
            flag = dir.Exists;
            try
            {
                if (!flag)
                {
                    dir.Create();
                }
                operation.isOk = !flag;
                operation.returnValue=string.Format("创建指定目录{0}成功", targetDir);
            }
            catch (Exception ex) 
            {
                operation.isOk = false;
                operation.returnValue = string.Format("创建指定目录{0}失败,失败原因{1}", targetDir,ex.ToString());
            }
            return operation;
        }
        #endregion


        #region 建立子目录
        /// <summary>
        /// 建立子目录
        /// </summary>
        /// <param name="parentDir">目录路径</param>
        /// <param name="subDirName">子目录名称</param>
        public OperationResult CreateChildDirectory(string parentDir, string subDirName)
        {
            string path = parentDir + "\\" + subDirName;
            return CreateDirectory(path); 
        }
        #endregion


        #region 重命名文件夹
        /// <summary>
        /// 重命名文件夹
        /// </summary>
        /// <param name="OldFloderName">原路径文件夹名称</param>
        /// <param name="NewFloderName">新路径文件夹名称</param>
        /// <returns></returns>
        public  bool ReNameFloder(string OldFloderName, string NewFloderName)
        {
            try
            {
                if (Directory.Exists(OldFloderName))
                {
                    Directory.Move(OldFloderName, NewFloderName);
                }
                return true;
            }
            catch
            {
                return false;
            }
        }
        #endregion


        #region 删除指定目录
        /// <summary>
        /// 删除指定目录
        /// </summary>
        /// <param name="targetDir">目录路径</param>
        public OperationResult DeleteDirectory(string targetDir)
        {
            DirectoryInfo dirInfo = new DirectoryInfo(targetDir);
            if (dirInfo.Exists)
            {
                 return DeleteDirectoryFiles(targetDir, true);
            }
            operation.isOk = false;
            operation.returnValue = string.Format("目录{0}不存在", targetDir);
            return operation;
        }
        #endregion


        #region 检测目录是否存在
        /// <summary>
        /// 检测目录是否存在
        /// </summary>
        /// <param name="StrPath">路径</param>
        /// <returns></returns>
        public bool DirectoryIsExists(string StrPath)
        {
            DirectoryInfo dirInfo = new DirectoryInfo(StrPath);
            return dirInfo.Exists;
        }

        /// <summary>
        /// 检测目录是否存在
        /// </summary>
        /// <param name="StrPath">路径</param>
        /// <param name="Create">如果不存在,是否创建</param>
        public void DirectoryIsExists(string StrPath, bool Create)
        {
            DirectoryInfo dirInfo = new DirectoryInfo(StrPath);
            flag = DirectoryIsExists(StrPath);
            if (!flag)
            {
                if (Create)
                { 
                    dirInfo.Create(); 
                }
            }
        }
        #endregion


        #region 删除指定目录的所有子目录,不包括对当前目录文件的删除
        /// <summary>
        /// 删除指定目录的所有子目录,不包括对当前目录文件的删除
        /// </summary>
        /// <param name="targetDir">目录路径</param>
        public OperationResult DeleteSubDirectory(string targetDir)
        {
            flag = DirectoryIsExists(targetDir);
            if (flag) 
            {
                foreach (string subDir in Directory.GetDirectories(targetDir))
                {
                    DeleteDirectory(subDir);
                }
                operation.returnValue = string.Format("删除目录{0}下的所有子目录成功",targetDir);
            }
            operation.isOk = flag;
            operation.returnValue = string.Format("目录{0}不存在", targetDir);
            return operation;
        }
        #endregion


        #region 获取文件最后修改时间
        /// <summary>
        /// 获取文件最后修改时间
        /// </summary>
        /// <param name="FileUrl">文件真实路径</param>
        /// <returns></returns>
        public DateTime GetFileWriteTime(string FileUrl)
        {
            return File.GetLastWriteTime(FileUrl);
        }
        #endregion


        #region 重命名文件
        /// <summary>
        /// 重命名文件
        /// </summary>
        /// <param name="OldFileName">旧文件真实路径</param>
        /// <param name="NewFileName">新文件真实路径</param>
        /// <returns></returns>
        public OperationResult RenameFile(string OldFileName,string NewFileName)
        {
            flag = File.Exists(OldFileName);
            if (flag) 
            {
                File.Move(OldFileName, NewFileName);
                operation.isOk = flag;
                operation.returnValue = string.Format("旧文件{0}重命名为新文件{1}成功", OldFileName, NewFileName);
                return operation;
            }
            operation.isOk = flag;
            operation.returnValue = string.Format("旧文件{0}不存在", OldFileName);
            return operation;
        }
        #endregion


        #region 返回指定路径的文件的扩展名
        /// <summary>
        /// 返回指定路径的文件的扩展名
        /// </summary>
        /// <param name="PathFileName">完整路径的文件</param>
        /// <returns></returns>
        public string GetFileExtension(string PathFileName)
        {
            return Path.GetExtension(PathFileName);
        }
        #endregion


        #region 判断是否是隐藏文件
        /// <summary>
        /// 判断是否是隐藏文件
        /// </summary>
        /// <param name="path">文件路径</param>
        /// <returns></returns>
        public bool IsHiddenFile(string path)
        {
            FileAttributes MyAttributes = File.GetAttributes(path);
            string MyFileType = MyAttributes.ToString();
            if (MyFileType.LastIndexOf("Hidden") != -1) //是否隐藏文件
            {
                return true;
            }
            return false;
        }
        #endregion


        #region 以只读方式读取文本文件
        /// <summary>
        /// 以只读方式读取文本文件
        /// </summary>
        /// <param name="FilePath">文件路径及文件名</param>
        /// <returns></returns>
        public  string ReadTxtFile(string FilePath)
        {
            flag = File.Exists(FilePath);
            string content = "";//返回的字符串
            if (flag) 
            {  
                using (FileStream fs = new FileStream(FilePath, FileMode.Open))
                {
                    using (StreamReader reader = new StreamReader(fs, Encoding.UTF8))
                    {
                        string text = string.Empty;
                        while (!reader.EndOfStream)
                        {
                            text += reader.ReadLine() + "\r\n";
                            content = text;
                        }
                    }
                }
            }
            return content;
        }
        #endregion


        #region 将内容写入文本文件(如果文件path存在就打开,不存在就新建)
        /// <summary>
        /// 将内容写入文本文件(如果文件path存在就打开,不存在就新建)
        /// </summary>
        /// <param name="FilePath">文件路径</param>
        /// <param name="WriteStr">要写入的内容</param>
        /// <param name="FileModes">写入模式:append 是追加写, CreateNew 是覆盖</param>
        public  OperationResult WriteStrToTxtFile(string FilePath, string WriteStr, FileMode FileModes)
        {
            flag = File.Exists(FilePath);
            operation.isOk = flag;
            if (flag) 
            {
                FileStream fst = new FileStream(FilePath, FileModes);
                StreamWriter swt = new StreamWriter(fst, Encoding.GetEncoding("utf-8"));
                swt.WriteLine(WriteStr);
                swt.Close();
                fst.Close();
                operation.returnValue = string.Format("写入为文件{0}数据成功", FilePath);
                return operation;
            }  
            operation.returnValue = string.Format("文件{0}不存在", FilePath);
            return operation;
        }
        #endregion


        #region 获取本地驱动器名列表
        /// <summary>
        /// 获取本地驱动器名列表
        /// </summary>
        /// <returns></returns>
        public static string[] GetLocalDrives()
        {
            return Directory.GetLogicalDrives();
        }
        #endregion


        #region 获取应用程序当前可执行文件的路径
        /// <summary>
        /// 获取应用程序当前可执行文件的路径
        /// </summary>
        /// <returns></returns>
        public static string GetAppCurrentDirectory()
        {
            return Application.StartupPath;
        }
        #endregion


        #region 获取文件大小并以B,KB,GB,TB方式表示[+2 重载]
        /// <summary>
        /// 获取文件大小并以B,KB,GB,TB方式表示
        /// </summary>
        /// <param name="File">文件(FileInfo类型)</param>
        /// <returns></returns>
        public static string GetFileSize(FileInfo File)
        {
            string Result = "";
            long FileSize = File.Length;
            if (FileSize >= 1024 * 1024 * 1024)
            {
                if (FileSize / 1024 * 1024 * 1024 * 1024 >= 1024) Result = string.Format("{0:############0.00} TB", (double)FileSize / 1024 * 1024 * 1024 * 1024);
                else Result = string.Format("{0:####0.00} GB", (double)FileSize / 1024 * 1024 * 1024);
            }
            else if (FileSize >= 1024 * 1024) Result = string.Format("{0:####0.00} MB", (double)FileSize / 1024 * 1024);
            else if (FileSize >= 1024) Result = string.Format("{0:####0.00} KB", (double)FileSize / 1024);
            else Result = string.Format("{0:####0.00} Bytes", FileSize);
            return Result;
        }


        /// <summary>
        /// 获取文件大小并以B,KB,GB,TB方式表示
        /// </summary>
        /// <param name="FilePath">文件的具体路径</param>
        /// <returns></returns>
        public static string GetFileSize(string FilePath)
        {
            string Result = "";
            FileInfo File = new FileInfo(FilePath);
            long FileSize = File.Length;
            if (FileSize >= 1024 * 1024 * 1024)
            {
                if (FileSize / 1024 * 1024 * 1024 * 1024 >= 1024) Result = string.Format("{0:########0.00} TB", (double)FileSize / 1024 * 1024 * 1024 * 1024);
                else Result = string.Format("{0:####0.00} GB", (double)FileSize / 1024 * 1024 * 1024);
            }
            else if (FileSize >= 1024 * 1024) Result = string.Format("{0:####0.00} MB", (double)FileSize / 1024 * 1024);
            else if (FileSize >= 1024) Result = string.Format("{0:####0.00} KB", (double)FileSize / 1024);
            else Result = string.Format("{0:####0.00} Bytes", FileSize);
            return Result;
        }
        #endregion


        #region Http下载文件
        /// <summary>
        /// 下载文件
        /// </summary>
        /// <param name="FileFullPath">下载文件下载的完整路径及名称</param>
        public void DownLoadFiles(string FileFullPath)
        {
            if (!string.IsNullOrEmpty(FileFullPath) && (FileExists(FileFullPath)).isOk)
            {
                FileInfo fi = new FileInfo(FileFullPath);                           //文件信息
                FileFullPath = HttpUtility.UrlEncode(FileFullPath);                 //对文件名编码
                FileFullPath = FileFullPath.Replace("+", "%20");                    //解决空格被编码为"+"号的问题
                HttpContext.Current.Response.Clear();
                HttpContext.Current.Response.ContentType = "application/octet-stream";
                HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment; filename=" + FileFullPath);
                HttpContext.Current.Response.AppendHeader("content-length", fi.Length.ToString()); //文件长度
                int chunkSize = 102400;                                             //缓存区大小,可根据服务器性能及网络情况进行修改
                byte[] buffer = new byte[chunkSize];                                //缓存区
                using (FileStream fs = fi.Open(FileMode.Open))                      //打开一个文件流
                {
                    //如果没到文件尾并且客户在线
                    while (fs.Position >= 0 && HttpContext.Current.Response.IsClientConnected) 
                    {
                        int tmp = fs.Read(buffer, 0, chunkSize);                //读取一块文件
                        if (tmp <= 0) break;                                    //tmp=0说明文件已经读取完毕,则跳出循环
                        HttpContext.Current.Response.OutputStream.Write(buffer, 0, tmp);//向客户端传送一块文件
                        HttpContext.Current.Response.Flush();//保证缓存全部送出
                        Thread.Sleep(10);                                       //主线程休息一下,以释放CPU
                    }
                }
            }
        }
        #endregion
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值