C#文件操作

C#文件操作
 删除文件:Systme.IO.File.Delete("d:\\test.txt");在删除文件之前,也可用File.Exists("d:\\test.txt")方法检查文件是否存在,返回false文件不存在。
 复制文件: File.Copy("d:\\test.txt", "e:\\abc.txt", true); 意思是把D盘的test.txt复制到e盘下,并改名为abc.txt。
后面那个参数指当有同名的文件情况下,是否覆盖掉同名的文件。true为覆盖掉。
 移动文件:File.Move("d:\\test.txt", "e:\\abc.txt");这句,如果e盘下已经存在一个abc.txt文件了,就会产生异常。
 创建文件:File.Create("d:\\ddd.bbb");

 追加打开一个文件:File.AppendText,从文件的末尾读写。
 打开文件:File.Open("d:\\eee.txt", FileMode.Open);这个函数返回文件流FileStream,可进行读写。另:如果第二个参数为
FileMode.CreateNew则表明创建文件,如果文件已存在,则引发异常。FileMode.Create表明文件存在,依旧创建覆盖掉原有的文件。

当然文件的创建,删除等并不一定非得通过File类,还有一些其它跟文件操作相类的也可以做到。
用StreamReader类来读入一行文本:
    class Programt
    {
        static void Main(String[] args)
        {
          //用StreamWriter类来创建一个文件,并写入数据
            StreamWriter strWriter = new StreamWriter("d:\\1233.txt");
            strWriter.WriteLine("333333333");
            strWriter.WriteLine("4444444");
            //关闭流
            strWriter.Close();
            //打开1233.txt
            StreamReader strReader = new StreamReader("d:\\1233.txt");
            //循环读取一行文本,返回null则文件读取到头。
            String textLine;
            while ((textLine = strReader.ReadLine()) != null)
            {
                //输出一行文本内容
                Console.WriteLine(textLine);
            }
        }
       
    }
另外还有FileStream类,这个类在说异常的时候用到过,现在我直接把那个例子修改一下,贴在下面。
它构造函数的参数解释可以参考File.Open的参数。
  class Programt
    {
        static void Main(String[] args)
        {
            try
            {
                FileStream fileStream = new FileStream("d:\\test.txt", FileMode.Open);
                //读取所有数据
                byte[] buffer = new byte[fileStream.Length];
                fileStream.Read(buffer, 0, (int)fileStream.Length);
               
                //转换成字符串
                String str = Encoding.Default.GetString(buffer);
                Console.WriteLine(str);
            }
            catch (FileNotFoundException e)
            {
                Console.WriteLine("文件不存在!");
            }

        }
       
    }
像之前写入(读取)的数据都是以字符串的形式(Unicode编码的字符串转换成字节),这次我们直接写入
其它数据类型的。二进制读写文件。用BinaryWriter,看下例:
    class Programt
    {
        static void Main(String[] args)
        {
            //创建文件
            FileStream stream = File.Open("d:\\binary.txt", FileMode.Create);
            BinaryWriter bryWriter = new BinaryWriter(stream);
            for (int i = 0; i < 5; i++)
                bryWriter.Write(i);//整形i占4个字节
            //关闭流
            bryWriter.Close();
            stream.Close();
            //再读取出来
            FileStream strReader = File.Open("d:\\binary.txt", FileMode.Open);

            BinaryReader bryReader = new BinaryReader(strReader);
            for (int i = 0; i < 5; i++)
                Console.WriteLine(bryReader.ReadInt32());//每次读取4个字节,读取的是int32

        }

    }
也可以用bryWriter.Write写入其它数据类型,如字符:bryWriter.Write('c');当然字符占两个字节。

也可以读写字节byte数组。这里不做说明了,另外,字符串与字节数组的转换可以参考网络编程那里。
上面我写入5个整型类型,共占20个字节,那么如果用文本编辑器(字符串形式)打开那个文件的话。
可以看到20个乱码字符。这些数据可以一一对应起来。比如占4字节的整型数值1,它的二进制值就是:
00000000 00000000 00000000 00000001 那么文件里第1,2,3,4个字符的ASCII码的二进制值就是
前面4个。

另外FileStream.Seek指定位流的位置,可以指定位置从哪里开始读取流中的数据。

文件属性

File.GetAttributes可以获取文件的属性,这个函数的返回值是一个FileAttributes枚举类型。可以通过按位与,按位或的运算来判断。

设置也是一样File.SetAttributes。

比如判断一个文件是否具有隐藏属性:

if ((File.GetAttributes("d:\\test.txt") & FileAttributes.Hidden) == FileAttributes.Hidden)
            {
                Console.WriteLine("文件具有隐藏属性");
            }

或者把一个文件设置为隐藏:

File.SetAttributes("d:\\test.txt",File.GetAttributes("d:\\test.txt") | FileAttributes.Hidden);

按位与,按位或的运算原理可以参考如流,新一代智能工作平台

第十七个SetFileAttributes设置文件属性函数

文件夹(目录)的操作

创建一个文件夹:Directory.CreateDirectory("d:\\test");

复制目录:Directory.Move("d:\\test", "c:\\test");

删除目录:Directory.Delete("d:\\test", true);

遍历一个文件夹下的所有文件

先用DirectoryInfo类获取这个文件夹的信息。

如:DirectoryInfo dirInfo=new DirectoryInof("d:\\test");

再用GetFiles函数获取这个文件夹下所有文件的信息。

如FileInfo filesInfo=dirInfo.GetFiles();也可以使用通配符获取指定的文件,如只获取EXE文件的就是dirInfo.GetFiles("*.exe");

另外GetDirectories可以获取目录下的所有子目录。

看示例:

    class Programt
    {
        static void Main(String[] args)
        {
            DirectoryInfo dirInfo = new DirectoryInfo("d:\\test");
            Console.WriteLine("test目录下的文件:");
            FileInfo[] filesInfo = dirInfo.GetFiles();
            foreach (FileInfo fileInfo in filesInfo)
            {
                //输出文件名
                Console.WriteLine(fileInfo.Name);
            }
            Console.WriteLine("test目录下的子目录:");
            DirectoryInfo []dirs = dirInfo.GetDirectories();
            foreach (DirectoryInfo dir in dirs)
            {
                //输出子目录名
                Console.WriteLine(dir.Name);
            }

        }
    }

如果要遍历子目录下的文件,可以定义一个递归函数,用递归函数来完成。

 用DriveIfno类获取计算机各驱动器的信息。

 枚举所有盘符:

    class Programt
    {
        static void Main(String[] args)
        {
            DriveInfo[] dis = DriveInfo.GetDrives();
            foreach (DriveInfo di in dis)
            {
                Console.WriteLine(di.Name);
            }
        }
    }  

另外DriveInfo类里的AvailableFreeSpace和TotalSize记录着盘符的可用空间,和总大小。

  • 14
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bczheng1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值