Directory类和FileInfo类 实现与Directory类和File类大致相同的方法,并拥有一些公共属性和构造函数,但它们都是有状态的,并且这些类的成员都不是静态的。
FileInfo myfile=new FileInfo(@"文件路径");
使用Exists检测对象是否存在:myfile.Exists;返回bool
myfile.CopyTo(@"路径");
上面代码时间长,需要实例化对象,而下面代码不需要实例化对象,二者的结果一样
File.Copy(@"原路径",@"复制的路径")
处理文件夹使用 Directory
DirectoryInfo myFolder=new DirectoryInfo(@"文件夹路径")
属性:
CreationTime 创建文件、文件夹的时间。DirectoryName 仅用于FileInfo,包含文件夹的完整路径名。
Parent 仅用于DirectoryInfo 制定子目录的父目录。
Exists 文件或文件夹是否存在。
Extension 文件的扩展名,对于文件夹它返回空白。
FullName 文件或文件夹的完整路径名。
LastAccessTime 最后一次访问文件或文件夹的时间。
LastWriteTime 最后一次修改文件或文件夹的时间。
Name 文件或文件夹的名称。
Root 仅用于DirectoryInfo 路径的根部分。
Length 返回文件的大小,仅用于Fileinfo。
方法:
Create() 创建给定的文件夹或空文件。对于FileInfo,该方法会返回一个流对象,以便写入文件。
Delete() 删除文件或文件夹。对于文件夹,有一个可以递归的Delete选项。
MoveTo() 移动或重命名文件和文件夹。
Copy() 复制文件
CopyTo() 只用于FileInfo复制文件,注意文件夹没有复制方法。如果复制完整的目录树,需要单独复制每个文件,创建对应予旧文件夹的新文件夹。
GetDirectories() 只适用于DirectoryInfo 返回DirectoryInfo对象数组,该数组表示文件夹中包含的所有文件。
GetFiles() 只适用于DirectoryInfo 返回FileInfo对象数组,该数组表示文件夹中包含的所有文件。
FileInfo 也可以实现Open(),OpenRead(),OpenText(),OpenWrite(),Create(),CreateText()等方法。
Path类不能实例化,但是提供了一些静态方法。显示文件夹中某个文件的完整路径名使用方法:Path.Combine(@"文件夹路径","文件名");流是一个用于传输数据的对象,根据数据传输方向分为读取流和写入流。
MemoryStream读写内存,NetworkStream处理网络数据。
把传输数据的概念与特定的数据源分离开来,可以更容易交换数据源。
FileStream用于二进制文件中读写二进制数据,可以使用它读写任何文件。
StreamReader,StreamWriter专门用于读写文件。
FileMode :Append,Create,CreateNew,Open,OpenOrCreate,Truncate 模式
FileAccess:Read,ReadWrite,Write 访问方法
FileShare: Delete,Inheritable,None,Read,ReadWrite,Write 共享参数
FileStream fs=new FileStream(@"路径",FileMode.Create);
FileStream fs=new FileStream(@"路径",FileMode.Create,FileAccess.Write);
FileStream fs=new FileStream(@"路径",FileMode.Create,FileAccess.Write,FileShare.None);
使用完一个流以后使用fs.Close();方法关闭。
1、FileStream fs=new FileStream(@"路径",FileMode.Open);
StreamReader sr=new StreamReader(fs);
2、FileInfo file=new FileInfo(@"路径");
StreamReader sr=file.OpenText();
3、StreamReader sr=new StreamReader(@"路径",编码方法);
sr.Read();sr.ReadLine();sr.ReadToEnd();
1、StreamWrite sw=new StreamWrite(@"路径",true,Encoding.ASCII)
2、FileStream fs=new FileStream(@"路径",FileMode.WriteNew,FileAccess.Write,FileShare.Read);
StreamReader sr=new StreamReader(fs);
3、FileInfo file=new FileInfo(@"路径");
StreamReader sr=file.WriteText();
映射内存的文件
应用程序需要频繁地或随机地访问文件时,最好使用映射内存的文件和这个名称空间。
把文件加载到一段虚拟内存中,这些文件可以用作多个进程的共享资源。
为了使用映射内存的文件,必须使用两个对象:映射内存的文件实例,访问器对象。
读取驱动器信息使用DriveInfo
var di = DriveInfo.GetDrives().ToList();
di.ForEach(m =>
{
Console.WriteLine(m);
Console.WriteLine(m.TotalSize);
});
文件的ACL myfile.GetAccessControl;
using (var myfile=new FileStream(@"I:\tt1.txt",FileMode.Open,FileAccess.Read))
{
FileSecurity fs = myfile.GetAccessControl();
foreach (FileSystemAccessRule s in fs.GetAccessRules(true,true,typeof(NTAccount)))
{
Console.WriteLine(s.FileSystemRights);
}
}
注册表
HKEY_CLASSES_ROOT 包含系统上文件类型的细节,以及使用那些应用程序可以打开每种文件,还包含所有COM组件的注册信息。
HKEY_CURRENT_USERS 包含用户目前登陆的计算机的用户配置。这些配置包括桌面设置、环境变量、网络和打印机连接以及其他定义用户的操作环境的设置。
HKEY_LOCAL_MACHINE 是一个很大的配置单元,其中包含所有安装到计算机上的软件和硬件信息,这些设置不是用户特有的,而是用于所有登录到计算机上的用户。
HKEY_USERS 包含所有用户的用户首选项,
HKEY_CURRENT_CONFIG 包含计算机上硬件的详细信息。
HEKY_DYN_DATA 容器,包含存储在注册表中的任意易失性数据。
注册表类 Registry RegistryKey
RegistryKey表示一个注册表键,该类实现的方法可以浏览子建,创建新建,读取/修改键的值.
Registry 只能对注册表键进行单一的访问,以执行简单的操作。
RegistryKey hklm = Registry.LocalMachine;
var s = hklm.OpenSubKey("SoftWare");
var d = s.OpenSubKey("RegisteredApplications");
Console.WriteLine(d.GetValue("360se6"));
测试代码
class Program
{
static void Main(string[] args)
{
using (var mmfile = MemoryMappedFile.CreateFromFile(@"I:\tt1.txt", FileMode.Create, "fileHandle", 1024 * 1024))
{
string writemsg = DateTime.Now.ToString();
var myAccesstor = mmfile.CreateViewAccessor();
myAccesstor.WriteArray(0, Encoding.ASCII.GetBytes(writemsg), 0, writemsg.Length);
var read = new byte[writemsg.Length];
myAccesstor.ReadArray(0, read, 0, read.Length);
var sr = Encoding.ASCII.GetString(read);
Console.WriteLine(sr);
Console.ReadLine();
}
var di = DriveInfo.GetDrives().ToList();
di.ForEach(m =>
{
Console.WriteLine(m);
Console.WriteLine(m.TotalSize);
});
using (var myfile = new FileStream(@"I:\tt1.txt", FileMode.Open, FileAccess.Read))
{
FileSecurity fs = myfile.GetAccessControl();
foreach (FileSystemAccessRule s in fs.GetAccessRules(true, true, typeof(NTAccount)))
{
Console.WriteLine(s.FileSystemRights);
}
}
RegistryKey hklm = Registry.LocalMachine;
var s = hklm.OpenSubKey("SoftWare");
var d = s.OpenSubKey("RegisteredApplications");
Console.WriteLine(d.GetValue("360se6"));
Console.ReadLine();
}
}