(一)文件和注册表

对于文件系统操作,相关的类几乎都在System.IO名称空间中,而注册表操作由System.Win32名称空间中的类来处理。

(二)管理文件系统

  • System.MarshalByRefObject——这是.NET类中用于远程操作的基对象类,它允许在应用程序域之间编组数据。
  • FileSystemInfo——这是表示任何文件系统对象的基类。
  • FileInfo和File——这些类表示文件系统上的文件。
  • DirectoryInfo和Directory——这些类表示文件系统上的文件夹。
  • Path——这个类包含的静态成员可以用于处理路径名。
  • DriveInfo——它的属性和方法提供了指定驱动器的信息。

1、表示文件和文件夹的.NET类

Directory类和File类只包含静态方法,不能被实例化。

DirectoryInfo和FileInfo类实现与Directory类和File类大致相同的公共方法,并拥有一些公共属性和构造函数,但它们都是有状态的。

Ps:在需要对同一文件进行多次操作或需要维持状态的使用实例。

2、Path类

Path类不能实例化。它提供了一些静态方法,可以更容易地对路径名执行操作。

(三)读写文件

1、流

流是一个用于传输数的对象。

对于文件的读写,最常用的类是:

  • FileStream(文件流)——这个类主要用于在二进制文件中读写二进制数据——也可以使用它读写任何文件。
  • StreamReader(流读取器)和StreamWriter(流写入器)——这两个类专门用于读写文本文件。

(四)映射内存的文件

内存映射允许把文件的一部分或者全部加在一段虚拟的内存上,并可以把内存中的这个文件用作多个进程的共享资源。

static void Main(string[] args)
{
using (var mmFile = MemoryMappedFile.CreateFromFile(@"C: \Users\Administrator\Desktop\test.txt", FileMode.Create, "fileHandle", 1024 * 1024))
{
string valueToWrite = "写入内存映射文件";// + DateTime.Now.ToString("yyyy-MM-dd");
var myAccessor = mmFile.CreateViewAccessor(); myAccessor.WriteArray<byte>(0, Encoding.Default.GetBytes(valueToWrite), 0, valueToWrite.Length*2); var readOut = new byte[valueToWrite.Length*2];
myAccessor.ReadArray<byte>(0, readOut, 0, readOut.Length);
var finalValue = Encoding.Default.GetString(readOut); Console.WriteLine("内容:" + finalValue);
} Console.ReadKey();
}

(五)读取驱动器信息

DriveInfo类可以扫描系统,提供可用驱动器的列表。

DriveInfo[] di = DriveInfo.GetDrives();
foreach (DriveInfo itemDrive in di)
{
Console.WriteLine("====================");
Console.WriteLine("驱动器的名称:" + itemDrive.Name);
Console.WriteLine("ToString():" + itemDrive);
Console.WriteLine("驱动器上的可用空闲空间量:" + itemDrive.AvailableFreeSpace);
Console.WriteLine("文件系统的名称:" + itemDrive.DriveFormat);
Console.WriteLine("驱动器类型:" + itemDrive.DriveType);
Console.WriteLine("示驱动器是否已准备好的值:" + itemDrive.IsReady);
Console.WriteLine("驱动器的根目录:" + itemDrive.RootDirectory);
Console.WriteLine("驱动器上的可用空闲空间总量:" + itemDrive.TotalFreeSpace);
Console.WriteLine("驱动器上存储空间的总大小:" + itemDrive.TotalSize);
Console.WriteLine("驱动器的卷标:" + itemDrive.VolumeLabel);
Console.WriteLine("====================");
}

(六)文件的安全性

1、从文件中读取ACL

Console.WriteLine("输入文件的完整路径:");
string myFilePath = Console.ReadLine();
try
{
using (FileStream myFile = new FileStream(myFilePath, FileMode.Open, FileAccess.Read))
{
FileSecurity fileSec = myFile.GetAccessControl(); foreach (FileSystemAccessRule fileRule in fileSec.GetAccessRules(true, true, typeof(NTAccount)))
{
Console.WriteLine("{0} {1} {2} 访问 {3}", myFilePath, fileRule.AccessControlType == AccessControlType.Allow ? "支持" : "拒绝", fileRule.FileSystemRights, fileRule.IdentityReference);
}
}
}
catch (Exception)
{
Console.WriteLine("输入了无效文件路径!");
}

(七)读写注册表

1、注册表

在文件系统中,最上面的节点是磁盘的分区C:\、D:\等。在注册表中,最上面的节点是注册表的配置单元(Registry hive),已有的配置单元是不能改变的——共有7个注册表配置单元(但能使用regedit看见的只有5个):

  • HKEY_CLASSES_ROOT(HKCR)包含系统上文件类型的细节(.txt、.doc等),以及使用那些应用程序可以打开每种文件。它还包含所有COM组件的注册信息。
  • HKEY_CURRENT_USER(HKCU)包含用户目前登录的计算机的用户配置(桌面设置、环境变量、网络和打印机连接,以及其他定义用户的操作环境的设置)。
  • HKEY_LOCAL_MACHINE(HKLM)是一个很大的配置单元,其中包括所有安装到计算机上的软件和硬件信息。它还包含HKCR配置单元:HKCR实际上并不是一个独立的配置单元,而只是一个对注册表键HKLM/SOFTWARE/Classes的方便映射。
  • HKEY_USERS(HKUSR)包含所有用户的用户首选项。它还包含HKCU配置单元,HKCU配置单元是对HKEY_USERS中一个键的映射。
  • HKEY_CURRENT_CONGFIG(HKCF)包含计算机上硬件的详细信息。

其余的两个键包含临时信息,这些信息会经常更改:

  • HKEY_DYN_DATA是一个一般容器,包含需要存储在注册表中的任何易失性数据。
  • HKEY_PERFORMANCE_DATA包含与运行应用程序的性能相关的信息。

注册表项可以格式化为3个数据类型中的一个:

  • REG_SZ(大致相当于.NET的string)
  • REG_DWORD(大致相当于.NET的uint)
  • REG_BINARY(大致相当于.NET的byte[])

应用程序在注册表中会创建许多键,通常存储在HKLM\Software\<CompanyName>键中。

2、.NET注册表类

RegistryKey类实现的方法可以浏览子键、创建新键、读取或修改键中的值。

Registry类只能对注册表键进行单一访问,以执行简单的操作,另一个作用是提供表示顶级键的RegistryKey实例。

获得一个表示HKLM键的RegistryKey实例:

RegistryKey hklm = Registry.LocalMachine;//读取 Windows 注册表基项 HKEY_LOCAL_MACHINE

读取HKLM/Software/Microsoft键中的数据:

RegistryKey hklm = Registry.LocalMachine.OpenSubKey("Software").OpenSubKey("Microsoft");

修改HKLM/Software/Microsoft键:

RegistryKey hklm = Registry.LocalMachine.OpenSubKey("Software").OpenSubKey("Microsoft", true);

创建一个键,使用CreateSubKey()方法:

RegistryKey hklm = Registry.LocalMachine.OpenSubKey("Software",true).CreateSubKey("MyMicrosoft");

SetValue()方法设置键中的数据,GetValue()方法获取键中的值:

RegistryKey hklm = Registry.LocalMachine.OpenSubKey("Software", true).CreateSubKey("MyMicrosoft");
hklm.SetValue("MyValue", "Hello World");//设置值
hklm.SetValue("MyValue2", 10);//设置值
string myValue = (string)hklm.GetValue("MyValue");//读取值
int myValue2 = (int)hklm.GetValue("MyValue2");//读取值

最后需要关闭键:

hklm.Close();

或者使用using关键字:

using (RegistryKey h=Registry.LocalMachine){}

(八)读写独立存储器

独立存储器可以看作一个虚拟磁盘,在其中可以保存只能由创建它们的应用程序或其他应用程序实例共享的数据项。

使用ReadSettings()和SaveSetting()方法从独立存储器中读写值。

独立存储器、映射内存参考:http://blog.csdn.net/ghostbear/article/details/7328554

【读书笔记】C#高级编程 第二十四章 文件和注册表操作的更多相关文章

  1. R in action读书笔记(19)第十四章 主成分和因子分析

    第十四章:主成分和因子分析 本章内容 主成分分析 探索性因子分析 其他潜变量模型 主成分分析(PCA)是一种数据降维技巧,它能将大量相关变量转化为一组很少的不相关变量,这些无关变量称为主成分.探索性因 ...

  2. 读书笔记 - js高级程序设计 - 第十五章 使用Canvas绘图

    读书笔记 - js高级程序设计 - 第十三章 事件   canvas 具备绘图能力的2D上下文 及文本API 很多浏览器对WebGL的3D上下文支持还不够好   有时候即使浏览器支持,操作系统如果缺缺 ...

  3. 【读书笔记】C#高级编程 第二十二章 安全性

    (一)身份验证和授权 安全性的两个基本支柱是身份验证和授权.身份验证是标识用户的过程,授权在验证了所标识用户是否可以访问特性资源之后进行的. 1.标识和Principal 使用标识可以验证运行应用程序 ...

  4. 【读书笔记】C#高级编程 第十四章 内存管理和指针

    (一)后台内存管理 1.值数据类型 Windows使用一个虚拟寻址系统,该系统把程序可用的内存地址映射到硬件内存中的实际地址,该任务由Windows在后台管理(32位每个进程可使用4GB虚拟内存,64 ...

  5. 【读书笔记】C#高级编程 第二十五章 事务处理

    (一)简介 事务的主要特征是,任务要么全部完成,要么都不完成. (二)概述 事务由事务管理器来管理和协调.每个影响事务结果的资源都由一个资源管理器来管理.事务管理器与资源管理器通信,以定义事务的结果. ...

  6. 读书笔记 - js高级程序设计 - 第十二章 DOM2和DOM3

      Node类型的变化   访问元素的样式 myDiv.style.backgroundColor = "red" myDiv.style.width = "100px& ...

  7. Gradle 1.12用户指南翻译——第二十四章. Groovy 插件

    其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...

  8. “全栈2019”Java多线程第二十四章:等待唤醒机制详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  9. “全栈2019”Java第二十四章:流程控制语句中决策语句switch下篇

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

随机推荐

  1. Linux安装MySQL,数据库工具连接Linux的MySQL

    1.centOS中默认安装了MariaDB,需要先进行卸载 rpm -qa | grep -i mariadb rpm -e --nodeps 上面查出来的mariadb 2.下载MySQL仓库并安装 ...

  2. kvm虚拟机在线扩容

    fdisk -l查看当前虚拟机磁盘容量 1. 镜像扩容 先操作镜像,给镜像增加2T容量: 关闭虚拟机back_log,然后再宿主机上给虚拟机扩容 qemu-img info /home/kvm/bac ...

  3. 「BUAA OO Unit 4 HW16」第四单元总结与课程回顾

    「BUAA OO Unit 4 HW16」第四单元总结与课程回顾 目录 「BUAA OO Unit 4 HW16」第四单元总结与课程回顾 Part 0 第四单元作业架构设计 架构设计概要 AppRun ...

  4. nginx启动失败/报错(bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket...permissions) nginx启动失败

    出现这个问题是因为80端口被占用了 1.cmd输入命令netstat -aon|findstr "80" 2..查看80端口 16356对应的任务 输入命令 tasklist|fi ...

  5. who is the next one?

    Turn-Taking:  参加会话的人参加整个会话的过程中轮流说话,end-of-utterance detection systems,是对说话转变的预测,既什么时候发生对话者之间的转变. Eva ...

  6. 攻防世界MISC—进阶区32—37

    32.normal_png 得到一张png,扔进kali中binwalk 和 pngcheck一下,发现CRC报错 尝试修改图片高度,我是把height的2改为4,得到flag 33.很普通的数独 得 ...

  7. 我已经说了5种css居中实现的方式了,面试官竟然说还不够?

    这是一篇关于居中对齐方式的总结 开篇之前,先问一下大家都知道几种居中的实现方式? 面试时答出来两三个就不错了,就怕面试官还让你继续说.今天就来总结一下这些居中的方式 使用flex布局设置居中. 使用f ...

  8. AtCoder Beginner Contest 260 F - Find 4-cycle

    题目传送门:F - Find 4-cycle (atcoder.jp) 题意: 给定一个无向图,其包含了S.T两个独立点集(即S.T内部间的任意两点之间不存在边),再给出图中的M条边(S中的点与T中的 ...

  9. OpenMP入门

    OpenMP入门 前情提要:并行(parallel):需要多个运算核心同时完成 其中有多处理器和单处理器多核两种实现方式,其中差异如下: 同一芯片上的多核通信速度更快 同一芯片上的多核能耗更低 Ope ...

  10. MySQL金融应用场景下跨数据中心的MGR架构方案(1)

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 0. 内容提纲 运行环境 部署MGR A&B 部署MGR A.B之间的复制通道 几个注意事项 如何在多个数据中心部 ...