文件以及目录常用操作
// 由于File.Create方法默认向所有用户授予对新文件的完全读/写访问权限,
//所以文件是用读/写访问权限打开的,必须关闭后才能由其他应用程序打开。
//为此,所以需要使用FileStream类的Close方法将所创建的文件关闭。
//File只能被一个流读写,用完需要关闭。
//FileStream和Stream的区别
//FileStream对象表示在磁盘或网络路径上指向文件的流。
//这个类提供了在文件中读写字节的方法,但经常使用StreamReader或StreamWriter执行这些功能。
//这是因为FileStream类操作的是字节和字节数组,而Stream类操作的是字符数据.
DirectoryInfo di = Directory.CreateDirectory("D:\\tempFiles");
// craete 对目录是否存在,需要进行判定;如果创建的文件存在,返回同名文件;文件流用完需要关闭
FileStream fs = File.Create(@"D:\tempFiles\test3.txt");
fs.Close();
//字符串和字节数组转换
Encoding encoder = Encoding.UTF8;//
byte[] info = encoder.GetBytes("HelloWorld!\r\n1");//字符串转为字节数组
string strOrign = Encoding.UTF8.GetString(info);//字节数组转为字符串
//生成文件换行
string strNewLine = "\r\n";//一定是\r\n 反了就错了
strNewLine = System.Environment.NewLine;//等价与 /r/n
//open FileMode.Append 如果有则打开,如果没有则创建。
FileStream fs1 = File.Open(@"D:\tempFiles\test5.txt", FileMode.Open);
//wirte字节
fs1.Position = fs1.Length;
fs1.Write(info, 0, info.Length);
//read字节
fs1.Position = 0;
byte[] readInfo = new byte[fs1.Length];
fs1.Read(readInfo, 0, (Int32)fs1.Length);
fs1.Close();
//exists delete
File.Exists("路径");
File.Delete("路径");
//copy overwrite 表示文件存在时,是否可以覆盖;
File.Copy(@"D:\tempFiles\test5.txt", @"D:\tempFiles\test5.txt", false);//同名报错
File.Copy(@"D:\tempFiles\test5.txt", @"D:\tempFiles\test5.txt", true);//可以覆盖
//move 当文件存在是会报错,需要和exists连用
File.Move(@"D:\tempFiles\test5.txt", @"D:\tempFiles\test.txt");
//追加写字符串
StreamWriter sw = new StreamWriter(@"D:\tempFiles\test2.txt", true);
sw.Write("HelloWorld!\n\r1");
sw.Close();
//初次创建文件并写字符串
FileStream fs2 = File.Create(@"D:\test.txt");
StreamWriter sw2 = new StreamWriter(fs2);
sw2.Write("HelloWorld!\r\n1");
sw2.Close();
sw2.Close();
fs2.Close();
//读取文件字符形式
StreamReader sr = new StreamReader(@"D:\test.txt");
string strLine = sr.ReadLine();
while (!string.IsNullOrEmpty(strLine))
{
Console.WriteLine(strLine);
strLine = sr.ReadLine();
}
//文件属性
FileInfo fi = new FileInfo(@"D:\test.txt");
StreamWriter sw3 = fi.AppendText();
DateTime dt = fi.CreationTime;//创建时间 2013--7-7 16:07:08
DateTime dt2 = fi.LastWriteTime;//最后一次写入时间 2013--7-7 16:35:08
string FileExtension = fi.Extension;//扩展名 .txt
string fullname = fi.FullName;//完整目录 D:\test.txt
DirectoryInfo dir = fi.Directory; //父级目录对象 D:\
string dirName = fi.DirectoryName; //父级目录字符串 D:\
// 目录
DirectoryInfo dir2 = Directory.CreateDirectory(@"D:\temp2");//当存在时,返回目录
Directory.Delete(@"D:\temp2", true);//true 表示可以删除子目录以及子文件
bool isExist = Directory.Exists(@"D:\temp2");
DateTime dt4 = Directory.GetCreationTime(@"D:\temp2");
Directory.Move(@"D:\temp2", @"D:\temp3");//移动
//目录查询
// 得到系统目录
DriveInfo[] DriveList = DriveInfo.GetDrives(); // 返回 C:\ D:\ 等
//得到目录下的文件集合
// 通过Diertory 得到集合
foreach (string item in Directory.GetFiles(@"D:\")) //返回的是 D:\test.test 返回的是全路径
Console.WriteLine(item);
foreach (string item in Directory.GetDirectories(@"D:\")) //返回的是 D:\test.test 返回的是全路径
Console.WriteLine(item);
//通过DiroryInfo得到集合
DirectoryInfo dir3 = new DirectoryInfo(@"D:\");
FileInfo[] fileInfos = dir3.GetFiles();
foreach (FileInfo fi3 in fileInfos)
Console.WriteLine(fi3.FullName + fi3.Name + "\r\n\r\n");
DirectoryInfo[] dirs = dir3.GetDirectories();
foreach (DirectoryInfo item in dirs)
Console.WriteLine(item.FullName + item.Name);
//遍历目录下所有文件
GetFiles(@"D:\");//显示每一个文件名
public static void GetFiles(string path)
{
//如果是文件的话
if (File.Exists(path))
{
return;
}
//如果是目录的话
if (Directory.Exists(path))
{
foreach (FileInfo item in new DirectoryInfo(path).GetFiles())
Console.WriteLine(item.FullName);
foreach (DirectoryInfo item in new DirectoryInfo(path).GetDirectories())
GetFiles(item.FullName);
return;
}
}
//对路径字符串的处理
string path = Path.Combine(@"D:\", @"test.txt");
Path.GetDirectoryName(path);//D:\
Path.GetExtension(path);//.txt
Path.GetFileName(path);//test.txt
Path.GetFullPath(path);//D:\test.txt
Path.HasExtension(path);//true