【C#编程最佳实践 十九】与文件相关的操作

最近做的内部项目有很多内容与文件操作相关,这才发现,基础的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
发布了240 篇原创文章 · 获赞 114 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/sinat_33087001/article/details/98649719
今日推荐