风动破

导航

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();
            }
        }
    }

posted on 2015-05-05 17:49  风动破  阅读(240)  评论(0)    收藏  举报