博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[No0000DB]C# FtpClientHelper Ftp客户端上传下载重命名 类封装
阅读量:5316 次
发布时间:2019-06-14

本文共 22293 字,大约阅读时间需要 74 分钟。

using System;using System.Diagnostics;using System.IO;using System.Text;using Shared;namespace Helpers{    public static class FileHelper    {        #region  Methods        ///         ///     向文本文件的尾部追加内容        ///         ///         /// 写入的内容        public static void AppendText(string filePath, string content)        {            File.AppendAllText(filePath, content);        }        ///         ///     清空指定目录下所有文件及子目录,但该目录依然保存.        ///         /// 指定目录的绝对路径        public static void ClearDirectory(string directoryPath)        {            if (IsExistDirectory(directoryPath))            {                //删除目录中所有的文件                var filePaths = GetFileNames(directoryPath);                foreach (var filePath in filePaths)                    DeleteFile(filePath);                //删除目录中所有的子目录                var directoryPaths = GetDirectories(directoryPath);                foreach (var oneDirectoryPath in directoryPaths)                    DeleteDirectory(oneDirectoryPath);            }        }        ///         ///     清空文件内容        ///         /// 文件的绝对路径        public static void ClearFile(string filePath)        {            //删除文件            File.Delete(filePath);            //重新创建该文件            CreateFile(filePath);        }        ///         ///     检测指定目录中是否存在指定的文件,若要搜索子目录请使用重载方法.        ///         /// 指定目录的绝对路径        ///         ///     模式字符串,"*"代表0或N个字符,"?"代表1个字符。        ///     范例:"Log*.xml"表示搜索所有以Log开头的Xml文件。        ///         public static bool Contains(string directoryPath, string searchPattern)        {            try            {                //获取指定的文件列表                var fileNames = GetFileNames(directoryPath, searchPattern, false);                //判断指定文件是否存在                return fileNames.Length != 0;            }            catch (Exception exception)            {                LogHelper.LogError("Error! ", exception);                return false;            }        }        ///         ///     检测指定目录中是否存在指定的文件        ///         /// 指定目录的绝对路径        ///         ///     模式字符串,"*"代表0或N个字符,"?"代表1个字符。        ///     范例:"Log*.xml"表示搜索所有以Log开头的Xml文件。        ///         /// 是否搜索子目录        public static bool Contains(string directoryPath, string searchPattern, bool isSearchChild)        {            try            {                //获取指定的文件列表                var fileNames = GetFileNames(directoryPath, searchPattern, true);                //判断指定文件是否存在                return fileNames.Length != 0;            }            catch (Exception exception)            {                LogHelper.LogError("Error! ", exception);                return false;            }        }        ///         ///     将源文件的内容复制到目标文件中        ///         /// 源文件的绝对路径        /// 目标文件的绝对路径        public static void Copy(string sourceFilePath, string destFilePath)        {            File.Copy(sourceFilePath, destFilePath, true);        }        ///         ///     将一个目录的文件拷贝到另外一个目录去        ///         /// 源目录        /// 目标目录        /// 是否允许覆盖同名文件        /// 当出现多次调用此方法的时候,能够重命名多次,比如xxx.1.old,xxx.2.old        public static void CopyDir(string srcPath, string aimPath, bool flag, int version)        {            // 检查目标目录是否以目录分割字符结束如果不是则添加之            if (aimPath[aimPath.Length - 1] != Path.DirectorySeparatorChar)                aimPath += Path.DirectorySeparatorChar;            // 判断目标目录是否存在如果不存在则新建之            CreateDirectory(aimPath);            // 得到源目录的文件列表,该里面是包含文件以及目录路径的一个数组            // 如果你指向copy目标文件下面的文件而不包含目录请使用下面的方法            var fileList = Directory.GetFileSystemEntries(srcPath);            // 遍历所有的文件和目录            foreach (var file in fileList)                try                {                    // 如果这是一个目录,并且不是update目录,递归                    if (Directory.Exists(file))                    {                        var path = Path.GetDirectoryName(file);                        if (path != null)                        {                            var dirName = path.Split('\\');                            if (dirName[dirName.Length - 1].ToLower() != "update")                                CopyDir(file, aimPath + Path.GetFileName(file), flag, version);                        }                    }                    // 否则直接Copy文件(不拷贝update.xml文件)                    else if (!file.ToLower().Contains("update.xml"))                    {                        //如果是pdb文件,直接忽略                        if (file.Contains(".pdb") || file.Contains(".vshost.exe"))                            continue;                        //如果文件是dll或者exe文件,则可能是正在使用的文件,不能直接替换                        if (file.ToLower().Contains(".exe") || file.ToLower().Contains(".dll") ||                            file.ToLower().Contains(".pdb"))                        {                            var exist = false;                            //正在使用的文件将不能拷贝                            var onUsedFiles = AppDomain.CurrentDomain.GetAssemblies();                            foreach (var onUsedFile in onUsedFiles)                            {                                var filename = onUsedFile.ManifestModule.Name;                                //正在使用的文件                                if (file.Contains(filename))                                {                                    //先判断这个文件存在                                    if (Contains(aimPath, Path.GetFileName(file)))                                        File.Move(aimPath + Path.GetFileName(file),                                            aimPath + Path.GetFileName(file) + "." + version + ".old");                                    File.Copy(file, aimPath + Path.GetFileName(file), true);                                    exist = true;                                    break;                                }                            }                            //不是依赖项并且本身不是更新程序本身                            if (!exist)                                File.Copy(file, aimPath + Path.GetFileName(file), true);                            //更新程序自身的更新(单独调试此工程的时候需要用到这一段)                            /*if (Path.GetFileName(file) == "EastMoney.BPF.DataPlatformUpgrade.exe")                            {                                try                                {                                    File.Move(aimPath + Path.GetFileName(file),                                        aimPath + Path.GetFileName(file) + "." + version + ".old");                                    File.Copy(file, aimPath + Path.GetFileName(file), true);                                }                                catch (Exception exception)                                {                                                    LogHelper.LogError("Error! ", exception);                                }                            }*/                        }                        else                        {                            File.Copy(file, aimPath + Path.GetFileName(file), true);                        }                    }                }                catch (Exception exception)                {                    LogHelper.LogError("拷贝文件失败,失败原因为:" + exception.Message + " 文件名为:" + file, exception);                }        }        ///         ///     创建一个目录        ///         /// 目录的绝对路径        public static void CreateDirectory(string directoryPath)        {            //如果目录不存在则创建该目录            if (!IsExistDirectory(directoryPath))                Directory.CreateDirectory(directoryPath);        }        ///         ///     创建一个文件。        ///         /// 文件的绝对路径        public static bool CreateFile(string filePath)        {            try            {                //如果文件不存在则创建该文件                if (!IsExistFile(filePath))                {                    var fileInfo = new FileInfo(filePath); //创建一个FileInfo对象                    var fileStream = fileInfo.Create(); //创建文件                    fileStream.Close(); //关闭文件流                }            }            catch (Exception exception)            {                LogHelper.LogError("Error! ", exception);                return false;            }            return true;        }        ///         ///     创建一个文件,并将字节流写入文件。        ///         /// 文件的绝对路径        /// 二进制流数据        public static bool CreateFile(string filePath, byte[] buffer)        {            try            {                //如果文件不存在则创建该文件                if (!IsExistFile(filePath))                {                    //创建一个FileInfo对象                    var file = new FileInfo(filePath);                    //创建文件                    var fs = file.Create();                    //写入二进制流                    fs.Write(buffer, 0, buffer.Length);                    //关闭文件流                    fs.Close();                }            }            catch (Exception exception)            {                LogHelper.LogError("Error! ", exception);                return false;            }            return true;        }        ///         ///     删除指定目录及其所有子目录(打开状态下降不能删除)        ///         /// 指定目录的绝对路径        public static void DeleteDirectory(string directoryPath)        {            if (IsExistDirectory(directoryPath))                try                {                    Directory.Delete(directoryPath, true);                }                catch (Exception exception)                {                    LogHelper.LogError("删除出错,可能是因为文件夹被打开了!请关闭后再试!路径为" + directoryPath + exception.Message, exception);                }        }        ///         /// 调用bat删除目录,以防止系统底层的异步删除机制        ///         ///         /// 
public static bool DeleteDirectoryWithCmd(string dirPath) { var process = new Process(); //string path = ...;//bat路径 var processStartInfo = new ProcessStartInfo("CMD.EXE", "/C rd /S /Q \"" + dirPath + "\"") { UseShellExecute = false, RedirectStandardOutput = true }; //第二个参数为传入的参数,string类型以空格分隔各个参数 process.StartInfo = processStartInfo; process.Start(); process.WaitForExit(); var output = process.StandardOutput.ReadToEnd(); if (string.IsNullOrWhiteSpace(output)) return true; return false; } /// /// 调用bat删除文件,以防止系统底层的异步删除机制 /// /// ///
public static bool DelFileWithCmd(string filePath) { var process = new Process(); //string path = ...;//bat路径 var processStartInfo = new ProcessStartInfo("CMD.EXE", "/C del /F /S /Q \"" + filePath + "\"") { UseShellExecute = false, RedirectStandardOutput = true }; //第二个参数为传入的参数,string类型以空格分隔各个参数 process.StartInfo = processStartInfo; process.Start(); process.WaitForExit(); var output = process.StandardOutput.ReadToEnd(); if (output.Contains(filePath)) return true; return false; } /// /// 删除指定文件 /// /// 文件的绝对路径 public static void DeleteFile(string filePath) { if (IsExistFile(filePath)) File.Delete(filePath); } /// /// 通过后缀名在目录中查找文件 /// /// 目录 /// 后缀名 public static void DeleteFiles(DirectoryInfo directory, string pattern) { if (directory.Exists && pattern.Trim() != string.Empty) { try { foreach (var fileInfo in directory.GetFiles(pattern)) fileInfo.Delete(); } catch (Exception exception) { LogHelper.LogError("Error! ", exception); } foreach (var info in directory.GetDirectories()) DeleteFiles(info, pattern); } } /// /// 将文件读取到缓冲区中 /// /// 文件的绝对路径 public static byte[] FileToBytes(string filePath) { //获取文件的大小 var fileSize = GetFileSize(filePath); //创建一个临时缓冲区 var buffer = new byte[fileSize]; //创建一个文件流 var fileInfo = new FileInfo(filePath); var fileStream = fileInfo.Open(FileMode.Open); try { //将文件流读入缓冲区 fileStream.Read(buffer, 0, fileSize); return buffer; } catch (Exception exception) { LogHelper.LogError("Error! ", exception); return null; } finally { fileStream.Close(); //关闭文件流 } } /// /// 将文件读取到字符串中 /// /// 文件的绝对路径 public static string FileToString(string filePath) { return FileToString(filePath, Encoding.Default); } /// /// 将文件读取到字符串中 /// /// 文件的绝对路径 /// 字符编码 public static string FileToString(string filePath, Encoding encoding) { //创建流读取器 var reader = new StreamReader(filePath, encoding); try { return reader.ReadToEnd(); //读取流 } catch { return string.Empty; } finally { reader.Close(); //关闭流读取器 } } /// /// 获取指定目录中所有子目录列表,若要搜索嵌套的子目录列表,请使用重载方法. /// /// 指定目录的绝对路径 public static string[] GetDirectories(string directoryPath) { try { return Directory.GetDirectories(directoryPath); } catch (Exception exception) { LogHelper.LogError("Error! ", exception); return null; } } /// /// 获取指定目录及子目录中所有子目录列表 /// /// 指定目录的绝对路径 /// /// 模式字符串,"*"代表0或N个字符,"?"代表1个字符。 /// 范例:"Log*.xml"表示搜索所有以Log开头的Xml文件。 /// /// 是否搜索子目录 public static string[] GetDirectories(string directoryPath, string searchPattern, bool isSearchChild) { try { return Directory.GetDirectories(directoryPath, searchPattern, isSearchChild ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly); } catch (Exception exception) { LogHelper.LogError("Error! ", exception); return null; } } /// /// 从文件的绝对路径中获取扩展名 /// /// 文件的绝对路径 public static string GetExtension(string filePath) { var fileInfo = new FileInfo(filePath); //获取文件的名称 return fileInfo.Extension; } /// /// 从文件的绝对路径中获取文件名( 包含扩展名 ) /// /// 文件的绝对路径 public static string GetFileName(string filePath) { //获取文件的名称 var fileInfo = new FileInfo(filePath); return fileInfo.Name; } /// /// 从文件的绝对路径中获取文件名( 不包含扩展名 ) /// /// 文件的绝对路径 public static string GetFileNameNoExtension(string filePath) { //获取文件的名称 var fileInfo = new FileInfo(filePath); return fileInfo.Name.Split('.')[0]; } /// /// 获取指定目录中所有文件列表 /// /// 指定目录的绝对路径 public static string[] GetFileNames(string directoryPath) { if (!IsExistDirectory(directoryPath)) //如果目录不存在,则抛出异常 throw new FileNotFoundException(); return Directory.GetFiles(directoryPath); //获取文件列表 } /// /// 获取指定目录及子目录中所有文件列表 /// /// 指定目录的绝对路径 /// /// 模式字符串,"*"代表0或N个字符,"?"代表1个字符。 /// 范例:"Log*.xml"表示搜索所有以Log开头的Xml文件。 /// /// 是否搜索子目录 public static string[] GetFileNames(string directoryPath, string searchPattern, bool isSearchChild) { if (!IsExistDirectory(directoryPath)) //如果目录不存在,则抛出异常 throw new FileNotFoundException(); try { return Directory.GetFiles(directoryPath, searchPattern, isSearchChild ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly); } catch (Exception exception) { LogHelper.LogError("Error! ", exception); return null; } } /// /// 获取一个文件的长度,单位为Byte /// /// 文件的绝对路径 public static int GetFileSize(string filePath) { //创建一个文件对象 var fileInfo = new FileInfo(filePath); //获取文件的大小 return (int) fileInfo.Length; } /// /// 获取一个文件的长度,单位为KB /// /// 文件的路径 public static double GetFileSizeByKB(string filePath) { var fileInfo = new FileInfo(filePath); //创建一个文件对象 var size = fileInfo.Length / 1024; return double.Parse(size.ToString()); //获取文件的大小 } /// /// 获取一个文件的长度,单位为MB /// /// 文件的路径 public static double GetFileSizeByMB(string filePath) { var fileInfo = new FileInfo(filePath); //创建一个文件对象 var size = fileInfo.Length / 1024 / 1024; return double.Parse(size.ToString()); //获取文件的大小 } /// /// 得到文件大小 /// /// ///
public static long GetFileSizeFromPath(string filePath = null) { if (string.IsNullOrEmpty(filePath)) return -1; if (!File.Exists(filePath)) return -1; var objFile = new FileInfo(filePath); return objFile.Length; } /// /// 获取文本文件的行数 /// /// 文件的绝对路径 public static int GetLineCount(string filePath) { //将文本文件的各行读到一个字符串数组中 var rows = File.ReadAllLines(filePath); //返回行数 return rows.Length; } /// /// 检测指定目录是否为空 /// /// 指定目录的绝对路径 public static bool IsEmptyDirectory(string directoryPath) { try { //判断是否存在文件 var fileNames = GetFileNames(directoryPath); if (fileNames.Length > 0) return false; //判断是否存在文件夹 var directoryNames = GetDirectories(directoryPath); return directoryNames.Length <= 0; } catch { return false; } } /// /// 检测指定目录是否存在 /// /// 目录的绝对路径 public static bool IsExistDirectory(string directoryPath) { return Directory.Exists(directoryPath); } /// /// 检测指定文件是否存在,如果存在则返回true。 /// /// 文件的绝对路径 public static bool IsExistFile(string filePath) { return File.Exists(filePath); } /// /// 将文件移动到指定目录 /// /// 需要移动的源文件的绝对路径 /// 移动到的目录的绝对路径 public static void Move(string sourceFilePath, string descDirectoryPath) { //获取源文件的名称 var sourceFileName = GetFileName(sourceFilePath); if (IsExistDirectory(descDirectoryPath)) { //如果目标中存在同名文件,则删除 if (IsExistFile(descDirectoryPath + "\\" + sourceFileName)) DeleteFile(descDirectoryPath + "\\" + sourceFileName); //将文件移动到指定目录 File.Move(sourceFilePath, descDirectoryPath + "\\" + sourceFileName); } } /// /// 将流读取到缓冲区中 /// /// 原始流 public static byte[] StreamToBytes(Stream stream) { try { //创建缓冲区 var buffer = new byte[stream.Length]; //读取流 stream.Read(buffer, 0, int.Parse(stream.Length.ToString())); //返回流 return buffer; } catch (Exception exception) { LogHelper.LogError("Error! ", exception); return null; } finally { stream.Close(); //关闭流 } } /// /// 向文本文件中写入内容,默认UTF8编码 /// /// 文件的绝对路径 /// 写入的内容 /// public static void WriteText(string filePath, string content, Encoding encoding = null) { if (encoding == null) { encoding = Encoding.UTF8; } File.WriteAllText(filePath, content, encoding); //向文件写入内容 } #endregion /// /// 重命名文件夹内的所有子文件夹 ============================ /// /// 文件夹名称 /// 新子文件夹名称格式字符串 public static bool RenameDirectories(string directoryName, string newDirectoryName) { DirectoryInfo directoryInfo = new DirectoryInfo(directoryName); if (!directoryInfo.Exists) { return false; } try { int i = 1; //string[] sDirectories = Directory.GetDirectories(directoryName); foreach (var sDirectory in directoryInfo.GetDirectories()) { string sNewDirectoryName = string.Format(newDirectoryName, i++); string sNewDirectory = Path.Combine(directoryName, sNewDirectoryName); sDirectory.MoveTo(sNewDirectory); // Directory.Move(sDirectory, sNewDirectory); } return true; } catch (Exception exception) { LogHelper.LogError("Error! ", exception); return false; } } /// /// 文件重命名 /// /// /// public static bool FileRename(string filePath, string newFileName) { FileInfo fileInfo = new FileInfo(filePath); // 列表中的原始文件全路径名 if (!fileInfo.Exists) { return false; } // fileInfo.DirectoryName // fileInfo.MoveTo(Path.Combine(newStr));// 改名方法 return true;// 新文件名 } }}

 

转载于:https://www.cnblogs.com/Chary/p/No0000DB.html

你可能感兴趣的文章
POJ 1015 Jury Compromise(双塔dp)
查看>>
论三星输入法的好坏
查看>>
Linux 终端连接工具 XShell v6.0.01 企业便携版
查看>>
JS写一个简单日历
查看>>
Python 发 邮件
查看>>
mysql忘记密码的解决办法
查看>>
全面分析Java的垃圾回收机制2
查看>>
[Code Festival 2017 qual A] C: Palindromic Matrix
查看>>
修改博客园css样式
查看>>
Python3 高阶函数
查看>>
初始面向对象
查看>>
leetcode Letter Combinations of a Phone Number
查看>>
Unity 5.4 测试版本新特性---因吹丝停
查看>>
7.5 文件操作
查看>>
MyEclipse中将普通Java项目convert(转化)为Maven项目
查看>>
node js 安装.node-gyp/8.9.4 权限 无法访问
查看>>
windows基本命令
查看>>
VMware中CentOS设置静态IP
查看>>
[poj1006]Biorhythms
查看>>
Hyper-V虚拟机上安装一个图形界面的Linux系统
查看>>