最近做的内部项目有很多内容与文件操作相关,这才发现,基础的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