c#文件管理
public class FileInfoTest
{
private string root = @"c:\测试\呵呵\哈哈\";
private string fileName = @"11111.txt";
public FileInfoTest()
{
//byte[] content = ReadFile(@"D:\迅雷下载\C#常用IO流与读写文件.doc");
//WriteFile(@"D:\迅雷下载\1.doc", content);
FileStreamDone();
StreamWriterReader(@"C:\测试\呵呵\哈哈\2.txt");
MemoryMappedFileDone(@"C:\测试\呵呵\哈哈\3.txt");
FileControlACL(@"C:\测试\呵呵\哈哈\3.txt");
ForlderControlACL(@"C:\测试\呵呵\");
UpdateFileControlACL(@"C:\测试\呵呵\哈哈\3.txt");
DiskMessage();
//需要用反斜杠
string strPath = pathCombine(root, fileName);
if (DirectoryOperate(FormatRegularPath(strPath)))
{
FileInfoOperate(strPath);
}
Console.ReadKey();
}
/// <summary>
/// 路径组合
/// </summary>
public string pathCombine(string root,string filename)
{
Console.WriteLine("平台特定的字符:" + Path.DirectorySeparatorChar);
Console.WriteLine("平台特定的替换字符:" + Path.AltDirectorySeparatorChar);
return Path.Combine(@root, @filename);
}
/// <summary>
/// 磁盘信息
/// </summary>
public void DiskMessage()
{
DriveInfo[] drives = DriveInfo.GetDrives();
foreach (DriveInfo d in drives)
{
if (d.IsReady)
{
Console.WriteLine("总容量:" + d.TotalFreeSpace);
Console.WriteLine("可用容量:" + d.AvailableFreeSpace);
Console.WriteLine("驱动器类型:" + d.DriveFormat);
Console.WriteLine("驱动器的名称:" + d.Name + "\n");
}
}
Console.WriteLine("======================================");
}
/// <summary>
/// 文件操作:移动、复制、删除文件
/// </summary>
public bool FileInfoOperate(string strPath)
{
FileInfo file = new FileInfo(strPath);
if (!file.Exists) { //不存在,创建文件
File.WriteAllText(strPath, "测试数据");
Console.WriteLine("==========文件已创建=========");
}
//判断文件是否存在
Console.WriteLine("创建时间:" + file.CreationTime);
Console.WriteLine("路径:" + file.DirectoryName);
StreamWriter sw = file.AppendText();//打开追加流
sw.Write("风动破");
sw.Dispose();//释放资源,关闭文件
string parentPath = FormatRegularParentPathFilename(strPath);
File.Move(strPath, parentPath);//移动到父类路径下
Console.WriteLine("==========移动文件=========");
File.Copy(parentPath, strPath);
Console.WriteLine("==========复制原来文件路径=========");
File.Delete(parentPath);
Console.WriteLine("==========删除父类路径下的文件=========");
return true;
}
/// <summary>
/// 目录操作
/// </summary>
public bool DirectoryOperate(string strPath)
{
DirectoryInfo dirInfo = new DirectoryInfo(strPath);
if (!dirInfo.Exists)
{//创建路径
dirInfo.Create();
}
Console.WriteLine("父文件夹:" + dirInfo.Parent.FullName);
//输出父目录下的所有文件与文件夹
FileSystemInfo[] files = dirInfo.Parent.GetFileSystemInfos();
foreach (FileSystemInfo fs in files)
{
Console.WriteLine(fs.Name);
}
return true;
//FileSystemInfo[] filesRoot = dirInfo.GetFileSystemInfos();//判断目录是否为空
//if (filesRoot.Length > 0) Console.WriteLine("目录不为空,删除失败");
//else Directory.Delete(dirInfo.FullName);//删除文件夹
}
/// <summary>
/// 正则解析路径
/// </summary>
public string FormatRegularPath(string path)
{
return FilePathRegular.GetPartRoute(path, RouteType.PathExceptName);
}
/// <summary>
/// 得到父类路径+文件名
/// </summary>
public string FormatRegularParentPathFilename(string path)
{
string tempDir = FilePathRegular.GetPartRoute(path, RouteType.PathExceptName);
string filename = FilePathRegular.GetPartRoute(path, RouteType.FileName);
DirectoryInfo dirInfo = new DirectoryInfo(tempDir);
return pathCombine(dirInfo.Parent.FullName,filename);
}
/// <summary>
/// 读取文件
/// </summary>
public byte[] ReadFile(string path)
{
byte[] b = File.ReadAllBytes(path);
Console.WriteLine("ReadAllBytes读二进制:");
//foreach (byte temp in b)
//{
// Console.Write((char)temp + " ");
//}
//string[] s = File.ReadAllLines(path, Encoding.UTF8);
//Console.WriteLine("\nReadAllLines读所有行:");
//foreach (string temp in s)
//{
// Console.WriteLine("行:" + temp);
//}
string str = File.ReadAllText(path, Encoding.UTF8);
//Console.WriteLine("ReadAllText读所有行:\n" + str);
return b;
}
public void WriteFile(string path,byte[] content)
{
if(!File.Exists(path) ) //不存在,创建文件
File.WriteAllText(path, "测试数据");
File.WriteAllBytes(path, content);//写入二进制
Console.WriteLine("WriteAllBytes写入二进制成功");
string[] array = { "123", "456", "7890" };
File.AppendAllLines(path, array, Encoding.UTF8);//写入所有行
Console.WriteLine("WriteAllLines写入所有行成功");
File.AppendAllText(path, "abcbefghijklmn", Encoding.UTF8);//写入字符串
Console.WriteLine("WriteAllText写入字符串成功\nOK!");
}
/// <summary>
/// FileStream读取二进制文件
/// </summary>
public void FileStreamDone()
{
string path = @"C:\测试\呵呵\哈哈\1.txt";
byte[] bytes;
//以写文件的方式创建文件
using (FileStream file = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write))
{
string str = "测试文件--风动破";
bytes = Encoding.UTF8.GetBytes(str);
file.Write(bytes, 0, bytes.Length);//写入二进制
Console.WriteLine("写入数据成功!!!");
}
//以读文件的方式打开文件
using (FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read))
{
byte[] temp = new byte[bytes.Length];
file.Read(temp, 0, temp.Length);//读取二进制
Console.WriteLine("读取数据:" + Encoding.Unicode.GetString(temp));
}
}
/// <summary>
/// StreamWriter StreamReader
/// 使用StreamWriterStreamReader就不用担心文本文件的编码方式,所以它们很适合读写文本文件。
/// </summary>
public void StreamWriterReader(string path)
{
using (FileStream file = new FileStream(path, FileMode.Create, FileAccess.Write,FileShare.ReadWrite)) {
StreamWriter sw = new StreamWriter(file);
sw.WriteLine("测试文件--风动破");
sw.Dispose();
Console.WriteLine("写入数据成功!!!");
}
//以读文件的方式打开文件
using (FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) {
StreamReader sr = new StreamReader(file);
Console.WriteLine("读取数据:" + sr.ReadToEnd());
sr.Dispose();
}
}
/// <summary>
/// 映射内存的文件
/// 应用程序需要频繁地或随机地访问文件时,最好使用MemoryMappedFile类(映射内存的文件)。
/// 使用这种方式允许把文件的一部分或者全部加载到一段虚拟内存上,这些文件内容会显示给应用程序,
/// 就好像这个文件包含在应用程序的主内存中一样
/// </summary>
public void MemoryMappedFileDone(string path)
{
MemoryMappedFile mmfile = MemoryMappedFile.CreateFromFile(path, FileMode.OpenOrCreate, "MapName", 1024 * 1024);
MemoryMappedViewAccessor view = mmfile.CreateViewAccessor();//内存映射文件的视图
//或使用数据流操作内存文件
//MemoryMappedViewStream stream = mmfile.CreateViewStream();
string str = "测试数据:风动破!";
int length = Encoding.UTF8.GetByteCount(str);
view.WriteArray<byte>(0, Encoding.UTF8.GetBytes(str), 0, length);//写入数据
byte[] b = new byte[length];
view.ReadArray<byte>(0, b, 0, b.Length);
Console.WriteLine(Encoding.UTF8.GetString(b));
mmfile.Dispose();//释放资源
}
public void FileControlACL(string path)
{
FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read,FileShare.ReadWrite);
FileSecurity filesec = file.GetAccessControl();//得到文件访问控制属性
//输出文件的访问控制项
foreach (FileSystemAccessRule filerule in
filesec.GetAccessRules(true, true, typeof(NTAccount)))
{
Console.WriteLine(filerule.AccessControlType
+ "--" + filerule.FileSystemRights + "--" + filerule.IdentityReference);
}
Console.WriteLine("==============================");
file.Dispose();
}
public void ForlderControlACL(string path)
{
DirectoryInfo dir = new DirectoryInfo(path);
DirectorySecurity filesec = dir.GetAccessControl();//得到文件访问控制属性
//输出文件的访问控制项
foreach (FileSystemAccessRule filerule in
filesec.GetAccessRules(true, true, typeof(NTAccount)))
{
Console.WriteLine(filerule.AccessControlType
+ "--" + filerule.FileSystemRights + "--" + filerule.IdentityReference);
}
Console.WriteLine("==============================");
}
/// <summary>
/// 修改ACL
/// </summary>
/// <param name="path"></param>
public void UpdateFileControlACL(string path)
{
FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read,FileShare.ReadWrite);
FileSecurity filesec = file.GetAccessControl();//得到文件访问控制属性
Print(filesec.GetAccessRules(true, true, typeof(NTAccount)));//输出文件访问控制项
FileSystemAccessRule rule = new FileSystemAccessRule(
new NTAccount(@"fdp-PC"), //计算机账户名
FileSystemRights.Delete, //操作权限
AccessControlType.Allow);//能否访问受保护的对象
filesec.AddAccessRule(rule);//增加ACL项
Print(filesec.GetAccessRules(true, true, typeof(NTAccount)));//输出文件访问控制项
filesec.RemoveAccessRule(rule);//移除ACL项
Print(filesec.GetAccessRules(true, true, typeof(NTAccount)));//输出文件访问控制项
file.Dispose();
Console.WriteLine("==============================");
}
private void Print(AuthorizationRuleCollection rules)
{
foreach (FileSystemAccessRule filerule in rules)
{
Console.WriteLine(filerule.AccessControlType
+ "--" + filerule.FileSystemRights + "--" + filerule.IdentityReference);
}
Console.WriteLine("================================================");
}
/// <summary>
/// 读写独立的存储器.IsolatedStorageFile类
/// </summary>
public void IsolatedStorageFileDone()
{
IsolatedStorageFileStream storStream = new IsolatedStorageFileStream(
@"Test.txt", FileMode.Create, FileAccess.Write);
string str = "测试数据:风动破!ABCD";
byte[] bs = Encoding.UTF8.GetBytes(str);
storStream.Write(bs, 0, bs.Length);//写数据
storStream.Dispose();
//读文件
IsolatedStorageFile storFile = IsolatedStorageFile.GetUserStoreForDomain();
string[] files = storFile.GetFileNames(@"Test.txt");
foreach (string t in files)
{
Console.WriteLine(t);
storStream = new IsolatedStorageFileStream(t, FileMode.Open, FileAccess.Read);
StreamReader sr = new StreamReader(storStream);
Console.WriteLine("读取文件:" + sr.ReadToEnd());
sr.Dispose();
storFile.DeleteFile(t);//删除文件
}
storFile.Dispose();
Console.WriteLine("OK!");
}
/*
* 6.读写注册表
(1)注册表介绍
Windows注册表是帮助Windows控制硬件、软件、用户环境和Windows界面的一套数据文件,运行regedit可以看到5个注册表配置单元(实际有7个):
HKEY-CLASSES-ROOT: 文件关联和COM信息
HKEY-CURRENT-USER: 用户轮廓
HKEY-LOCAL-MACHINE: 本地机器系统全局配置子键
HKEY-USERS: 已加载用户轮廓子键
HKEY-CURRENT-CONFIG:当前硬件配置
(2).NET操作注册表的类
在.NET中提供了Registry类、RegistryKey类来实现对注册表的操作。其中Registry类封装了注册表的七个基本主健:
Registry.ClassesRoot 对应于HKEY_CLASSES_ROOT主键
Registry.CurrentUser 对应于HKEY_CURRENT_USER主键
Registry.LocalMachine 对应于 HKEY_LOCAL_MACHINE主键
Registry.User 对应于 HKEY_USER主键
Registry.CurrentConfig 对应于HEKY_CURRENT_CONFIG主键
Registry.DynDa 对应于HKEY_DYN_DATA主键
Registry.PerformanceData 对应于HKEY_PERFORMANCE_DATA主键
RegistryKey类封装了对注册表的基本操作,包括读取,写入,删除。其中读取的主要函数有:
OpenSubKey() 主要是打开指定的子键。
GetSubKeyNames() 获得主键下面的所有子键的名称,它的返回值是一个字符串数组。
GetValueNames() 获得当前子键中的所有的键名称,它的返回值也是一个字符串数组。
GetValue() 指定键的键值。
写入的函数:
CreateSubKey() 增加一个子键
SetValue() 设置一个键的键值
删除的函数:
DeleteSubKey() 删除一个指定的子键。
DeleteSubKeyTree() 删除该子键以及该子键以下的全部子键。
* **/
/// <summary>
/// 注册表
/// </summary>
public void RegeditDone()
{
string path = @"SOFTWARE\Microsoft\Internet Explorer\Extensions";
RegistryKey pregkey = Registry.LocalMachine.OpenSubKey(path, true);//以只读方式
if (pregkey != null)
{
Console.WriteLine(pregkey.Name + "--" + pregkey.SubKeyCount + "--"
+ pregkey.ValueCount);
string preName = System.Guid.NewGuid().ToString();
pregkey.CreateSubKey(preName);//增加一个子键
RegistryKey new_pregkey = Registry.LocalMachine.OpenSubKey(
path + @"\" + preName, true);
new_pregkey.SetValue("姓名", "风动破");//设置一个键的键值
new_pregkey.SetValue("键名", "值内容");//设置一个键的键值
Console.WriteLine(pregkey.Name + "--" + pregkey.SubKeyCount + "--"
+ pregkey.ValueCount);
pregkey.Close();
new_pregkey.Close();
}
}
}
浙公网安备 33010602011771号