《C#高级编程》读书笔记(十六):文件和注册表操作
1,Directory类和File类
只包含静态方法,不能被实例化。只要调用一个成员方法,提供合适文件系统对象的路径,就可以使用这些类。如果只对文件夹或文件执行一个操作,使用这些类就很有效,因为这样可以省去实例化.NET类的系统开销。
File.Copy(@"C:\1.txt",@"D:\copy.txt");
2,DirectoryInfo类和FileInfo类
这两个类实现与Directory类和File大致相同的公共方法,并拥有一些公共属性和公共函数,但他们都是有状态的,并且这些类的成员都不是静态的。需要实例化这些类,之后把每个实例与特定的文件夹或文件关联起来。如果使用同一个对象执行多个操作,使用这些类就比较有效。
FileInfo myFile = new FileInfo(@"C:\1.txt"); myFile.CopyTo(@"D:\copy.txt");
3,Path类
Path类不能被实例化。然而,它提供了一些静态方法,可以更容易地对路径名执行操作。
比如要显示文件夹C:\My Documents中的ReadMe.txt文件的完整路径名,可以使用下述代码查找文件的路径:
Console.WriteLine(Path.Combine(@"C:\My Documents","ReadMe.txt"));
4,移到、复制和删除文件
移动和删除文件或文件夹可以使用FileInfo和DirectoryInfo类的MoveTo()和Delete()方法来完成。
File和Directory类的这两个对应方法时Move()和Delete()。
FileInfo和File类也分别实现CopyTo()和Copy()方法。
没有复制完整文件夹的方法,而应复制文件夹中的每个文件。
5,读写文件
在.NET Framework 4.5中,可以通过File对象读写文件。
读取:
textBox2.Text = File.ReadAllText(textBox1.Text);
写入:
File.WriteAllText(textBox1.Text,textBox2.Text);
6,流
流是一个用于传输数据的对象,数据可以向两个方向传输:
1)如果数据从外部源传输到程序中,这就是读取流。
2)如果数据从程序传输到外部源中,这就是写入流。
对于文件的读写,最常用的类如下:
FileStream(文件流)——这个类主要用于在二进制文件中读写二进制数据——也可以使用它读写任何文件。
StramReader(流读取器)和StreamWriter(流写入器)——这两个类专门用于读写文本文件。
StreamReader sr = new StreamReader(@"C:\My Documents\ReadMe.txt
把StreamReader关联到FileStream上。其优点是可以指定是否创建文件和共享许可。
FileStream fs = new FileStream(@"C:\My Documents\ReadMe.txt",FileMode.Open,FileAccess.Read,FileShare.None); StreamReader sr= new StreamReader(fs);
从一个FileInfo实例中获得StreamReader:
FileInfo myFile = new FileInfo(@"C:\1.txt"); StreamReader sr = myFile.OpenText();
StreamWriter类的工作方式与StreamReader类似,但StreamWriter只能用于写入文件(或另一个流)。
7,读取驱动器信息
读取驱动器信息可以使用DriveInfo类实现。该类可以扫描系统,提供可用驱动器的列表,还可以进一步提供任何驱动器的大量细节。
8,读写注册表
注册表是包含Windows安装、用户首选项,以及自己安装软件和设备的所有配置信息的核心存储库。
访问注册表,可以使用MicroSoft.Win32名称空间中的两个类Registry和RegistryKey。RegistryKey实例表示一个注册表键。这个类实现的方法可以浏览子键、创建新键、读取或修改键中的值。换言之,该类通常可以完成对注册表键进行的所有操作。
Registry类只能对注册表键进行单一的访问,以执行简单的操作。Registry类的另一个作用是提供表示顶级键的RegistryKey示例(不同的配置单元),以便开始在注册表中定位。
如果要读取HKLM/Software/Microsoft键中的一些数据,就可以使用下面的代码获得它的一个引用:
RegistryKey hklm = Registry.LocalMachine; RegistryKey hkSofeware = hklm.OpenSubKey("Software"); RegistryKey hkMicrosoft = hkSofeware.OpenSubKey("Microsoft");
如果要创建一个键,就应使用CreateSubKey()方法(该方法会通过返回的引用,自动提供该键的读写访问):
RegistryKey hklm = Registry.LocalMachine; RegistryKey hkSofeware = hklm.OpenSubKey("Software"); RegistryKey hkMicrosoft = hkSofeware.CreateSubKey("MyOwnSoftware");
CreateSubKey()方法的工作方式:如果键不存在,它就创建这个键。如果这个键已经存在,就返回一个表示该键的RegistryKey实例。