当前位置: 澳门新濠3559 > 编程 > 正文

他里同包含了很多关于处理文件的功能,用来描

时间:2019-11-08 04:40来源:编程
本章简言 1、 文件操作常用相关类 上一章我们对线程同步进行讲解。了解如何去处理可能发生的脏数据。而本章就要讲有关于C#他里同包含了很多关于处理文件的功能,用来描述一个文
本章简言

1、 文件操作常用相关类

上一章我们对线程同步进行讲解。了解如何去处理可能发生的脏数据。而本章就要讲有关于C#他里同包含了很多关于处理文件的功能,用来描述一个文件对象。在读取IO文件的时候,常常用到的操作类。这一章的内容会比较少。但是笔者还是总结出来让读者们有一个学习的方向。不至于不知道学习些什么。

a)File              //操作文件,静态类,对文件整体操作。拷贝、删除、剪切等。

File类

b)Directory        //操作目录(文件夹),静态类

这一个静态类。可以说是一个工具类吧。他里同包含了很多关于处理文件的功能。笔者只是列出常用的一些功能。更多的希望读者们自行去了解。

c)DirectoryInfo    //文件夹的一个“类”,用来描述一个文件夹对象

1.打开一个文件流。打开方式有很三种。如下代码

d)FileInfo         //文件类,用来描述一个文件对象

public static FileStream Open(string path, FileMode mode);
public static FileStream Open(string path, FileMode mode, FileAccess access);
public static FileStream Open(string path, FileMode mode, FileAccess access, FileShare share);

e)Path            //对文件或目录的路径进行操作(很方便)【字符串】

我们可以看到总共有四个参数。

f)Stream         //文件流,抽象类

path参数:表示文件的路径。

FileStream  //文件流,MemoryStream(内存流),NetworkStream(网络流)

FileMode参数:打开文件的模式。如:新建 、开打或是新建等模式。请读者们自行查看。也可以按F12查看源码里面的注解。

StreamReader         //快速读取文本文件

FileAccess参数:操作的模式。是只读还是读写。还是只写。

StreamWriter          //快速写入文本文件

FileShare参数:表示操作完之后是事情。请读者们自行查看。也可以按F12查看源码里面的注解。

2、 Path类(对字符串操作)

看一下笔者写的简单的列子吧。这样子方便学习。如下

  a) 目录和文件操作的命名空间System.IO

 1 static void Main(string[] args)
 2         {
 3             using (FileStream fs = File.Open("TextFile1.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite))
 4             {
 5                 if (fs.CanRead)
 6                 {
 7                     List<byte> dataList = new List<byte>();
 8                     byte[] buffer = new byte[1024];
 9                     int len = 0;
10                   
11                     while ((len = fs.Read(buffer, 0, buffer.Length)) > 0)
12                     {
13                         byte[] tmpBuffer = new byte[len];
14                         Array.Copy(buffer, 0, tmpBuffer, 0, tmpBuffer.Length);
15                         dataList.AddRange(tmpBuffer);
16                     }
17 
18                     Console.WriteLine(Encoding.UTF7.GetString(dataList.ToArray(), 0, dataList.Count));
19                 }
20             }
21 
22             Console.ReadKey();
23 
24         }

b) string ChangeExtension(string path, string extension) (*)

 FileStream类就是一个文件流。有了这个类我们就可以对文件做读写操作。相当于JAVA的FileInputStream类。上面的代码中我们可以看到笔者用到了一个Array类。他里面包含了很多对数组的操作。读者们可以看看。在输出的时候,笔者用到了编码格式的内容。Encoding是获得编码格式的开始。所以一定要记得Encoding类。

  修改文件的后缀,“修改”支持字符串层面的,没有真的给文件改名

2.直接记取文件内容。我们上面看到了要读取一个文件的内容。我们要做很多的事情。但是File类事实为我们做了一个简化的方法。

  string s = Path.ChangeExtension(@"C:tempF3.png", "jpg")

  Console.WriteLine(File.ReadAllText("TextFile1.txt", Encoding.UTF7));

 c) string Combine(string path1, string path2)

好吧。我们上面做了那么多的事情还不如他一句话的事。跟他类似的方法都是以Read开头的。请读者们自行查看。同理我们就可以看到一些以Write开头的方法。没有错。就是写入的意思。相信不用笔者多说了。

  将两个路径合成一个路径,比用+好,可以方便解决不加斜线的问题,自动处理路径分隔符的问题

3.删除文件。这个功能很常用。也很简单 

  string s = Path.Combine(@"c:temp","a.jpg")

File.Delete("TextFile1.txt");

 d) string GetDirectoryName(string path) (*)

4.判断是否存在。返回ture表示存在。

  得到文件的路径名。Path.GetDirectoryName(@"c:tempa.jpg")

File.Exists("TextFile1.txt");

     string GetExtension(string path) 得到文件的扩展名

Directory类

     string GetFileName(string path) 得到文件路径的文件名部分

Directory类同File类一样子是一个静态类。只是File类是用于处理文件,而Directory类却是用于处理目录。说到这里相信大家都明白。这里也是笔者为什么没有说上面的File类相当于JAVA的File类了。却确的说应该是俩者加在一起相当于JAVA的File类。

string GetFileNameWithoutExtension(string path) 得到去除扩展名的文件名

1.获得目录下的文件。

string GetFullPath(string path) 得到文件的全路径。可以根据相对路径获得绝对路径。

 string[] fileNames = Directory.GetFiles(".");

string GetTempFileName()  得到一个唯一的临时文件名(*)

2.创建对应的目录。

string GetTempPath() 得到临时文件夹的路径(*)

DirectoryInfo dir =  Directory.CreateDirectory("./test");
if (dir.Exists)
{
    Console.WriteLine("创建成功");
}
else
{
    Console.WriteLine("创建失败");
}

补充:Path.GetFileName()获取文件名

3.判断是否存在。

3、 操作目录

 if (Directory.Exists("./test"))
                Console.WriteLine("test目录已经存在");

Directory和DirectoryInfo

Path类

a)void Delete(string path, bool recursive)     删除目录

不得不说笔者在操作IO的时候,常常会用到Path类。他也是一个静态类。不要小看他,他有一些小功能真的很不错。下列就是笔者常常用的功能。

b)recursive表示是否递归删除,如果recursive为false则只能删除空目录

1.组装目录路径。

c)bool Exists(string path)      判断目录是否存在

 string dir = Path.Combine(".", "test");

move()

2.获得没有扩展名的文件名。他会帮你去掉“.txt”.

CreateDirectory()

 string name = Path.GetFileNameWithoutExtension("TextFile1.txt");

string[] GetDirectories(string path)  得到一个目录下的子目录

3.获得绝对路径里面的目录路径。这个时候就会返回“E:\test\”

string[] GetDirectories(string path, string searchPattern, SearchOption searchOption)    通配符查找目录下的子目录,可以搜索到隐藏文件。

string directoryNameg = Path.GetDirectoryName("E:\test\TextFile1.txt");

static string[] GetFiles(string path)  得到一个目录下的文件

4.判断是否为绝对路径。

string[] GetFiles(string path, string searchPattern, SearchOption searchOption)   通配符查找目录下的文件

Path.IsPathRooted("E:\test\TextFile1.txt");

DirectoryInfo GetParent(string path)  得到目录的父目录

StreamReader类和StreamWriter类

4、 File类的方法

笔者读取文本流的文件常常会用StreamReader类。我们可以看到下面的代码中有一叫@的符号。这个用于表示那后的字符串是表示路径。这个是你就可以不用“\”了。只要用""就可以了。

a)File.Copy(“source”, “targetFileName”, true);//文件拷贝,true表示当文件存在时“覆盖”,如果不加true,则文件存在报异常。

using (StreamReader sr = new StreamReader(@".TextFile1.txt", Encoding.UTF8, true))
{
      while (!sr.EndOfStream)
      {
          Console.WriteLine(sr.ReadLine());
      }
}

b)File.Exists();//判断文件是否存在

而常常用StreamWriter类来写入。

c)File.Move(“source”, “target”);//移动(剪切),思考如何为文件重命名?

using (FileStream fs = new FileStream(@".TextFile1.txt", FileMode.OpenOrCreate))
{
       StreamWriter sw = new StreamWriter(fs);
       sw.WriteLine("i am aomi");
       sw.Flush();
}

  C#里面,重命名文件时,没有 rename 这个功能,使用的是FileInfo.MoveTo的方式,MoveTo 到原目录里一个新的名字,即实现了重命名

XmlDocument类

d)File.Delete(“path”);//删除。如果文件不存在?不存在,不报错

笔者在开发应用的时候,常常会遇到关于读取xml配置文件。在C#里面常常会用到XmlDocument类。他就是一个读取Xml文件的操作类。相当于JAVA的Dom4j里面的SAXReader类。大部分的操作都很像。读者们不用担心。

e)File.Create(“path”);//创建文件

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("./XMLFile1.xml");
XmlElement xmlEle = xmlDoc.DocumentElement;

if (xmlEle.HasChildNodes)
{           
  Console.WriteLine(xmlEle.SelectSingleNode("Name").InnerText);
}

 

本章总结

操作文本文件

本章的内容会比较少。但笔者认为也不可以忽略。到了这一章可以说关于C#基础知识便全部结束了。而后的章节将进入C#应用开发的高级部分的介绍了。

a)File.ReadAllLines(“path”, Encoding.Default);//读取所有行,返回string[]

b)File.ReadAllText(“path”, Encoding.Default);//读取所有文本返回string

c)File.ReadAllBytes(“path”);//读取文件,返回byte[]

===================================

a)File.WriteAllLines(“path”, new string[4] ,Encoding.Default);//将b)string数组按行写入文件。

c)File.WriteAllText(“path”, “string”);//将字符串全部写入文件

d)File.WriteAllBytes(“path”,new byte[5]);//将byte[]全部写入到文件

e)File.AppendAllText()//将string追加到文件

 

File.Open(); //返回FileStream

File.OpenRead();//返回只读的FileStream

File.OpenWrite();//返回只写的FileStream

 

编辑:编程 本文来源:他里同包含了很多关于处理文件的功能,用来描

关键词: