最近做的内部项目有很多内容与文件操作相关,这才发现,基础的IO类自己都靠全网百度,想着把常用的文件操作记录下来,这样之后再遇到相关的文件操作,也许就能快速定位和实现了。主要分为以下两种吧:文件读写、文件路径。涉及到二者的一些常用操作总结一下。
文件读写
文件最常用的写入方式是:将二进制字符数组写入指定的路径。
/// <summary> /// 创建文件到指定路径并将二进制字符串写入文件 /// </summary> /// <param name="bytes"></param> /// <param name="fileName"></param> public static void BytesToFile(byte[] bytes, string fileName) { var directoryName = Path.GetDirectoryName(fileName); //返回指定路径字符串的目录信息 if (!Directory.Exists(directoryName)) Directory.CreateDirectory(directoryName); //创建指定目录的文件 var fs = new FileStream(fileName, FileMode.Create); var bw = new BinaryWriter(fs); bw.Write(bytes); bw.Close(); fs.Close(); }
同样配套的反向操作,最常用的读取方式是:将所有文件不分类型都转换为二进制字符数组。
/// <summary> /// 读取指定路径的文件内容并转为二进制字符数组 /// </summary> /// <param name="fileName"></param> /// <returns></returns> public static byte[] FileToBytes(string fileName) { var fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read); var bytes = new byte[fileStream.Length]; //创建文件流大小的字符数组 fileStream.Read(bytes, 0, bytes.Length); fileStream.Close(); return bytes; }
文件路径
关于文件路径的相关操作,这里只列举我在开发中常用的一些操作。包括将文件输出到同一文件夹下,判断同级目录下是否存在指定文件夹或文件:
1, 拼接完整的文件路径:完整文件路径拼接并依据路径自动生成文件夹(是开发过程中的意外之喜):
fileName = $@"{filePath}\{TemplateConstant.EXPORTFOLDERNAME}\{TemplateID},{fileNameGuid}" + TemplateConstant.BIN
,这里无论是文件夹还是文件后缀,都使用常量定义,方便全局修改,值得关注的是,中间部分{TemplateConstant.EXPORTFOLDERNAME}
可以作为文件夹的名称,文件的分级放置都可以通过这种方式。
2, 判断同级目录下是否存在指定文件夹或文件:想判断同级目录下是否存在该文件:
//获取当前路径的父级路径并拼接想要判断的同级路径 var path= $@"{System.IO.Directory.GetParent(importFile.Text)}\{TemplateConstant.EXPORTFOLDERNAME}"; var root = new DirectoryInfo(path); //读取该模板文件夹路径 if (!root.Exists || root.GetFiles().Length < 1) //判断该路径是否存在 { MessageBox.Show("同级目录不存在模板文件夹"); }
3,判断字符串数组里是否有字符串以指定后缀结尾:
var ifHasBin = files.Any(item => item.EndsWith(TemplateConstant.BIN)); //是否包含bin结尾文件 var ifHasTxt = files.Any(item => item.EndsWith(TemplateConstant.TXT)); //是否包含txt结尾文件
4,Path的一些常用操作:
string fileNameWithExtension = Path.GetFileName("C:\TMLTML\path\HELLO.jpg") 返回带扩展名的文件名 :HELLO.jpg string extension = Path.GetExtension("C:\TMLTML\path\HELLO.jpg"); 只获取文件扩展名 “.jpg” string fileNameWithOutExtension = Path.GetFileNameWithoutExtension("C:\TMLTML\path\HELLO.jpg") 返回不带扩展名的文件名:HELLO string path = Path.GetDirectoryName("C:\TMLTML\path\HELLO.jpg") 返回文件所在目录:C:\TMLTML\path string fullPath = Path.GetFullPath("C:\TMLTML\path\HELLO.jpg") 返回文件绝对路径:C:\TMLTML\path