所在命名空间:
using System.IO
1.Path
代码语言:javascript复制 string path = @"C:/Users/Leo/Desktop/123.txt";
获取路径的扩展名
string ge = Path.GetExtension(path);
Console.WriteLine(ge);
返回文件名与扩展名
string gf = Path.GetFileName(path);
Console.WriteLine(gf);
修改文件的后缀名(扩展名)
string ce = Path.ChangeExtension(path, ".exe");
Console.WriteLine(ce);
string str1 = "D:/";
string str2 = "super/run";
// 将字符串组合成一个路径
string cb = Path.Combine(str1, str2);
Console.WriteLine(cb);
返回路径的目录信息
string gd = Path.GetDirectoryName(path);
Console.WriteLine(gd);
拿到路径的文件名,不包括扩展名
string gfnwe = Path.GetFileNameWithoutExtension(path);
Console.WriteLine(gfnwe);
拿到自定字符串的绝对路径
string gfp = Path.GetFullPath(path);
Console.WriteLine(gfp);
// 拿到路径的根路径
string gpr = Path.GetPathRoot(path);
Console.WriteLine(gpr);
// 获取路径是否包含扩展名
//Console.WriteLine(Path.HasExtension(path));
// 判断路径是否包含根路径
Console.WriteLine(Path.IsPathRooted(path));
// 获取分隔符 ;
char c = Path.PathSeparator;
Console.WriteLine("8888" c);
// 获取硬盘的分割符 :
char c1 = Path.VolumeSeparatorChar;
Console.WriteLine("9999" c1);
// 获取路径的分割符
char c2 = Path.DirectorySeparatorChar;
Console.WriteLine("7777" c2);
// 获取路径的分割符在此平台的分隔符号 /
char c3 = Path.AltDirectorySeparatorChar;
Console.WriteLine("6666" c3);
//char[] cs = Path.InvalidPathChars;
//foreach (var item in cs)
//{
// Console.WriteLine("1111" item);
//}
2. FileInfo 文件操作
- 1> 实例化一个文件操作对象
FileInfo file = new FileInfo(将要操作的文件路径的字符串);
- 2> 创建该文件
file.Create(); // 创建一个文件
- 3> 判断文件是否存在
file.Exists(); 查看指定的文件路径是否存在
- 4> 获取文件的大小
file.Length; Length 获取一个文件的大小(单位是字节)
- 5> 文件的名称
file.Name; // 获取一个文件的名字(不包含路径)
- 6> 复制文件,会保留原有文件
file.CopyTo(将要复制到的路径,需要加复制过来的文件名字。);
file.CopyTo(@"C:UsersAdministratorDesktop" "test.txt");
- 7> 删除一个文件
file.Delete(); // 删除文件
- 8> 是否是只读
file.IsReadOnly;
- 9> 移动文件,会删除原有文件
file.MoveTo(将要移动到的地方); // 将一个文件移动到另一个地方。会删除源文件
项目中的文件操作,要求将项目中添加的文件放到项目输出目录下。 首先将文件拖拽到项目目录下。然后如下操作:
第一步
第二步
3. DirectoryInfo
文件夹操作
- 1> 实例化文件夹操作对象
DirectoryInfo dir = new DirectoryInfo("将要操作的文件夹的路径");
- 2> 判断文件夹是否存在
dir.Exists;
Console.WriteLine(dir.Exists);
- 3> 创建该文件夹
dir.Create();
- 4> 删除文件夹
dir.Delete(); // 删除该文件夹。
dir.Delete(True); // 删除该文件夹,并删除该文件夹下所有的子目录和文件
- 5> 获取该文件夹下的所有文件
dir.GetFiles(); // 返回FileInfo的数组
- 6> 移动文件夹
dir.MoveTo("将要移动到的路径"); // 将文件夹移动到另一个路径。 会删除原文件
- 7> 获取其父目录
dir.Parent; // 获取父目录 返回的是一个DirectoryInfo的对象
- 8> 获取文件夹的名字
dir.Name; // 获取文件夹的名字。 不包含路径信息
4.File
读写文件
- 中文的编码为gb2312
string path = @"C:/Users/Leo/Desktop/1234.txt";
//int range = path.LastIndexOf('/');
//string st = path.Substring(range 1);
//Console.WriteLine(st);
string[] strs = {"I have a dream!" };
// 给文件添加行
File.AppendAllLines(path, strs);
// 给文件添加字符串
File.AppendAllText(path, "you are beautiful");
// 注意:要被赋值的文件应该是不存在的
File.Copy(path, "C:/Users/Leo/Desktop/456.txt");
// 创建文件夹
File.Create(path);
// 创建文件,使用UTF8编码
File.CreateText(path);
// 删除
File.Delete(path);
//加密
File.Encrypt(path);
// 解密
File.Decrypt(path);
// 判断当前文件是否存在
if (File.Exists(path))
{
Console.WriteLine("当前文件存在");
}
else
{
Console.WriteLine("文件不存在");
}
// 获取封装路径的指定条目
FileSecurity d = File.GetAccessControl(path);
Console.WriteLine(d.ToString());
// 获取此路径上的档案
FileAttributes a = File.GetAttributes(path);
Console.WriteLine(a.ToString());
// 获取创建时间
DateTime t = File.GetCreationTime(path);
Console.WriteLine(t.ToLocalTime());
// 移动,会将原有的文件删除
File.Move(path, "C:/Users/Leo/Desktop/456.txt");
// 以读写的权限打开文件的流
File.Open(path, FileMode.OpenOrCreate);
// 拿到可以读取的当前文件流
FileStream str = File.OpenRead(path);
Console.WriteLine(str.ToString());
byte[] buffer = File.ReadAllBytes(path);
Console.WriteLine(buffer.Length);
for (int i = 0; i < buffer.Length; i )
{
// 输出的是元素的二进制数值(Ascii)
Console.WriteLine(buffer[i]);
}
// 输出里面所有的文件用字符串数组的方法
string[] substr = File.ReadAllLines(path);
foreach (var item in substr)
{
Console.WriteLine(item);
}
// 输出文本所有行
string lineStr = File.ReadAllText(path);
Console.WriteLine(lineStr);
// 控制文件的属性
FileAttributes f = FileAttributes.Device;
File.SetAttributes(path,f );
File.WriteAllText(path, "leichao");
string[] strnumber = { "leichjao", "jiaoyu", "huanying", "ni" };
File.WriteAllLines(path, strnumber);
byte[] b1 = { 59, 59, 59, 59, 59 };
File.WriteAllBytes(path,b1);
4. FileStream
读写文件
多用来处理2进制文件
代码语言:javascript复制FileSteam fs = new FileSteam("文件路径",FileModel.Open)
byte[] buffer = new byte[1024*1024*5];
// 返回被刺实际读取到的有效字节数
int r = fs.Read(buffer,0,buffer.Length);
// 将字节数组中每一个元素按照指定的编码格式解码成字符串
string s = Encoding.Default.GetString(buffer);
// 关闭流
fs.Close();
// 释放流所占用的资源
fs.Dispose();
using(FileSteam fs = new FileSteam(@"路径",FileMode.OpenOrCreat,FileAccess.Write))
{
string str = "谢谢你的关心";
byte[] buffer = Encoding.Default.GetBytes(str);
fs.Write(buffer,0,buffer.Length);
}
Console.WriteLine("写入ok");
// 1.创建一个负责读取的流
using(FileSteam fs = new FileSteam(source,FileMode.OpenOrCreat,FileAcces.Write))
{
// 创建写入的流
using(FileStream fsWrite = new FileStream(target,FileMode.OpenOrCreat,FileAcces.Write))
{
byte[] buffer = new byte[1024*1024*5];
// 因为文件比较大,所以通过一个循环去读取
while(true)
{
//返回读取到的字节数
int r = fs.Read(buffer,0,buffer.length)
// 如果r是0,就表示没有读取到
if(r==0)
{
break;
}
// 因为这个长度是固定的,并不是我们读取到的,所以以r为主
// fsWrite.Write(buffer,0,buffer.Length); 错误
fsWrite.Write(buffer,0,r);
}
}
}
6. StreamReader和StreamWriter
多用来用于处理文本文件。自动处理文本格式
代码语言:javascript复制 /// <summary>
/// 读取用户传递的路径文本资料,并以用户需要的格式显示出来
/// </summary>
/// <param 文件路径="path"></param>
/// <param 编码格式="encoding"></param>
static void StreamRead(string path,Encoding encoding)
{
using (StreamReader r = new StreamReader(path, encoding))
{ // 这种只能读取一行
// Console.WriteLine(r.ReadLine());
// 如果当前的流不在最后一个位置,意思就是没读完文本
while (!r.EndOfStream)
{
// 读取
Console.WriteLine(r.ReadLine());
}
r.Close(); // 释放资源
}
}
代码语言:javascript复制 /// <summary>
/// 书写自己添加的内容,并读取
/// </summary>
/// <param 文件路径="path"></param>
/// <param 编码格式="encoding"></param>
/// <param 书写内容="writerContent"></param>
static void StreamWrite(string path, Encoding encoding,string writerContent)
{
// 追加只需要在后面参数写true
using (StreamWriter s = new StreamWriter(path, true, encoding))
{
s.Write(writerContent);
s.Close();
}
}