1、Directory 和 File :
静态类;
父类:Object;
静态方法对文件进行创建、移动、删除和枚举所有文件夹和子文件夹成员
注:Move() 移动文件时源路径和目标路径必须具有相同的根,即移动操作在卷之间无效! 移动的目标文件夹不能存在
直接调用,使用方便,但是操作文件每次都要安全检查
if(Directory.Exits(path)) //文件存在性判断
注:path格式:@“F:\Unity\Demo” 或 “双\\”
2、DirectoryInfo 和 FileInfo
非静态类;
父类:FileSystemInfo;
需要实例化,安全性能高,适用于遍历子目录及目录中的文件列表
.Extension 获取文件扩展名
提供文件和目录的属性的类
a、剔除隐藏文件 与运算
DirectoryInfo dirInfo = new DirectoryInfo(path);
FileAttributes fileAttributes = new FileAttributes();
fileAttributes = dirInfo.Attributes & FileAttributes.Hidden;
if (fileAttributes == FileAttributes.Hidden)
{ //continue; }
b、设置文件隐藏或运算
DirectoryInfo dirInfo = new DirectoryInfo(path);
dirInfo.Attributes |= FileAttributes.Hidden;
4、递归
public static void GetJPG(DirectoryInfo dir)
{
FileInfo[] files = dir.GetFiles(); //获取文件对象
foreach(FileInfo file in files)
{
//扩展名为.jpg的文件过滤出来
if(file.Extension==".jpg")
{
Console.WriteLine(file.name);
}
}
DirectoryInfo[] dirs = dir.GetDirectories();
foreach(DirectoryInfo dirInfo in dirs)
{
GetJPG(dirInfo); //递归核心:方法中调用方法本身
}
}
1、FileStream
FileStream只能对“字节”操作
FileStream(string FilePath,FileMode.xxx)FileMode枚举类型Create/Open/…
///
/// 打开文件
///
/// 目标文件路径
public string OpenFile(string path)
{
FileStream fs = new FileStream(path, FileMode.Open);
byte[] bArray; //存储数据缓冲区
string content = null;
UTF8Encoding encoding = new UTF8Encoding();
//可变字符串类,优化下面代码中的字符串叠加
StringBuilder builder = new StringBuilder();
//要读取的数据大于存储数组的长度时,循环读取
while (true)
{
bArray = new byte[10]; //存储数据缓冲区
//Read()方法返回的是数据的长度,int类型
int count = fs.Read(bArray, 0, 10);
//当读取到的数据为空时,说明数据读取完毕,退出循环
if (count == 0)
{
break;
}
else
{
//content += encoding.GetString(bArray);
//代码优化:替代上述的 += ,提升性能
content = encoding.GetString(bArray);
builder.Append(content); //叠加字符串
}
}
//关闭文件流
fs.Close();
return builder.ToString();
}
注:最后要记得关闭文件流 fs.Close();
2、StreamReader 和 StreamWriter
可添加 Try-Catch块 来捕捉异常,作用是,要操作的目标文件被占用,即其他软件使用此文件时,给出错误提示
StreamWriter 写入器,简化FileStream用法的字节字符串转换等繁琐过程
但是,FileStream 带有对文件操作的模式
FileMode的优点不可取代
两者结合取精去粕:
///
/// 写入器向文件写入字符串
///
/// 目标文件路径
/// 写入内容
public void WiterFile(string path,string strToSave)
{
//文件流用以制定文件操作模式
FileStream fs = new FileStream(path, FileMode.Open);
//Encoding.Default 默认UTF-8格式
StreamWriter sw = new StreamWriter(fs, Encoding.Default);
sw.Write(strToSave);
//关闭写入器,关闭文件流; 遵循“先打开的后关闭”原则
sw.Close();
fs.Close();
}
注: sw.Close(); fs.Close();
关闭写入器,关闭文件流; 遵循“先打开的后关闭”原则
StreamReader读取器 (同写入器)
StreamReader sr = new StreamReader();
sr.ReadeLine();
sr.ReadeToEnd();
sr.Close();
OpenFileDialog 打开选择文件的对话框
DialogResult 获取文件选择对话框的结果OK/Cancel
///
/// 打开文件对话框
///
OpenFileDialog ofDlg = new OpenDialog(); //打开文件对话框类
//自定义的文件管理类
FileManager fm = new FileManager();
//窗体应用程序按钮点击事件
private void openNotePad_Click(object senger,EventArgs e)
{
//选择磁盘上的文件,并把文件里的信息在记事本上显示出来
//Filter 过滤文件
ofDlg.Filter ="文本文件(*.txt)|*.txt";
//对话框返回结果类
DialogResult ret = ofDlg.ShowDialog();
if(ret == System.Window.Forms.DialogResult.OK)
{
string path = ofDlg.FileName;
string content = fm.OpenFile(path);
this.txtContent.Text = content;
}
}
两种方式解决乱码:
Encoding.GetEncoding("ASCII")
Encoding.ASCII
静态方式
预防出现乱码,读取器/写入器中参数制定编码格式:Encoding.Default,默认即UTF-8格式;
读取器StreamReader 默认UTF-8格式;
写入器StreamWriter 默认UTF8Encoding的实例方法来指定编码转换格式
UTF8Encoding encoding = newUTF8Encoding();
string content = encoding.GetString(bArray);