面向对象(二十)-文件操作

2020-06-02 15:36:06 浏览数 (1)

所在命名空间: 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> 实例化一个文件操作对象
代码语言:javascript复制
FileInfo file = new FileInfo(将要操作的文件路径的字符串);
  • 2> 创建该文件
代码语言:javascript复制
file.Create(); // 创建一个文件
  • 3> 判断文件是否存在
代码语言:javascript复制
file.Exists(); 查看指定的文件路径是否存在 
  • 4> 获取文件的大小
代码语言:javascript复制
file.Length;   Length 获取一个文件的大小(单位是字节)
  • 5> 文件的名称
代码语言:javascript复制
file.Name;   // 获取一个文件的名字(不包含路径)
  • 6> 复制文件,会保留原有文件
代码语言:javascript复制
file.CopyTo(将要复制到的路径,需要加复制过来的文件名字。);
file.CopyTo(@"C:UsersAdministratorDesktop"   "test.txt"); 
  • 7> 删除一个文件
代码语言:javascript复制
file.Delete(); // 删除文件
  • 8> 是否是只读
代码语言:javascript复制
file.IsReadOnly; 
  • 9> 移动文件,会删除原有文件
代码语言:javascript复制
file.MoveTo(将要移动到的地方); // 将一个文件移动到另一个地方。会删除源文件

项目中的文件操作,要求将项目中添加的文件放到项目输出目录下。 首先将文件拖拽到项目目录下。然后如下操作:

第一步

第二步

3. DirectoryInfo 文件夹操作
  • 1> 实例化文件夹操作对象
代码语言:javascript复制
DirectoryInfo dir = new DirectoryInfo("将要操作的文件夹的路径");
  • 2> 判断文件夹是否存在
代码语言:javascript复制
dir.Exists;
Console.WriteLine(dir.Exists);
  • 3> 创建该文件夹
代码语言:javascript复制
dir.Create();
  • 4> 删除文件夹
代码语言:javascript复制
dir.Delete(); // 删除该文件夹。 
dir.Delete(True); // 删除该文件夹,并删除该文件夹下所有的子目录和文件
  • 5> 获取该文件夹下的所有文件
代码语言:javascript复制
dir.GetFiles(); // 返回FileInfo的数组
  • 6> 移动文件夹
代码语言:javascript复制
dir.MoveTo("将要移动到的路径"); // 将文件夹移动到另一个路径。 会删除原文件 
  • 7> 获取其父目录
代码语言:javascript复制
dir.Parent; // 获取父目录 返回的是一个DirectoryInfo的对象
  • 8> 获取文件夹的名字
代码语言:javascript复制
dir.Name; // 获取文件夹的名字。 不包含路径信息
4.File读写文件
  • 中文的编码为gb2312
代码语言:javascript复制
            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();
            }
        }

0 人点赞