C#复制文件、设置隐藏,只读属性


using System.IO;
using System.Windows.Forms;

        class roHidDirFile
        {
            /// <summary> 复制指定目录的所有文件<para> <para>
            /// 参数1(sourceDirectory): 原始目录 将此目录内容复制到新目录<para>
            /// 参数2(targetDirectory):  目标目录 将原始目录内容复制到此目录下
            /// </para></para></para> </summary>
            /// <param name="sourceDirectory">原始目录 将此目录内容复制到新目录</param>
            /// <param name="targetDirectory">目标目录 将原始目录内容复制到此目录下</param>
            public static void Copy(string sourceDirectory, string targetDirectory)
            {
                DirectoryInfo diSource = new DirectoryInfo(sourceDirectory);
                DirectoryInfo diTarget = new DirectoryInfo(targetDirectory);


                CopyAll(diSource, diTarget);
            }


            public static void CopyAll(DirectoryInfo source, DirectoryInfo target)
            {
                try
                {
                    // 检查目标文件夹是否存在,如果没有,就创建。
                    if (Directory.Exists(target.FullName) == false)
                    {
                        Directory.CreateDirectory(target.FullName);
                    }


                    // 复制文件到新目录。
                    foreach (FileInfo fi in source.GetFiles())
                    {    /* string path = 合并路径 */
                        string path = Path.Combine(target.ToString(), fi.Name);
                        if (File.Exists(path))  //判断将要覆盖的文件是否存在
                        {
                            FileInfo fi0 = new FileInfo(path);
                            if ((fi0.Attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
                            {/* 判断要覆盖的文件是否为只读,如果为真,取消只读(如果不取消 将报错:程序拒绝访问) */
                                roHidDirFile roh = new roHidDirFile();
                                roh.roHidFileNudo(path);
                                /* 静态类调用非静态类,要实例化整个类,如果能把静态和非静态类搬出窗体类
                                 * 尽可能搬出来放在自建类进行实例化
                                 */
                            }
                        } fi.CopyTo(path, true);
                        //fi.CopyTo(Path.Combine(target.ToString(), fi.Name), true);
                    }
                    // 使用递归复制文件夹。
                    foreach (DirectoryInfo diSourceSubDir in source.GetDirectories())
                    {
                        DirectoryInfo nextTargetSubDir = target.CreateSubdirectory(diSourceSubDir.Name);
                        CopyAll(diSourceSubDir, nextTargetSubDir);
                    }
                }
                catch (Exception e)
                { MessageBox.Show(e.ToString()); }
            }
            /// <summary> 创建并隐藏文件夹<para> <para>
            /// 参数(path): 如果文件夹存在,则使其隐藏
            /// </para></para> </summary>
            /// <param name="path">待创建文件夹的路径<para> <para>
            /// 如果文件夹存在,则使其隐藏
            /// </para></para></param>
            public void newDires(string path)
            {
                DirectoryInfo di = new DirectoryInfo(path);
                DateTime times = DateTime.Now;
                if (!di.Exists)
                {
                    di.Create(); //创建文件夹 roHidDir(path);
                    MessageBox.Show("文件夹已创建");
                }
                else if ((di.Attributes & FileAttributes.Hidden) != FileAttributes.Hidden)
                {
                    roHidDir(path);
                    di.LastWriteTime = times;
                    di.LastAccessTime = times;
                    MessageBox.Show("文件夹已隐藏");
                }
                else MessageBox.Show("文件夹已经是隐藏的了");
            }
            /// <summary> 创建文件 </summary>
            /// <param name="path">文件名(包含路径)</param>
            /// <param name="str">写入内容</param>
            public void newFile(string path, string str)
            {
                FileInfo fi = new FileInfo(path);
                var dir = fi.Directory;
                if (!dir.Exists)
                { newDires(dir.FullName); }
                if (!File.Exists(path))
                { SaveFiles(path, str); }
                else if ((fi.Attributes & FileAttributes.ReadOnly)
                != FileAttributes.ReadOnly)
                { SaveFiles(path, str); }
                else
                {
                    roHidFileNudo(path); SaveFiles(path, str);
                }
                roHidFile(path);
            }
            /// <summary> 保存文件 </summary>
            /// <param name="path">文件路径及文件名</param>
            /// <param name="str">输入内容</param>
            public void SaveFiles(string path, string str)
            {
                Form1 f1 = new Form1();

                RichTextBox rbox = f1.ribox;
                /* 如果RichTextBox中的内容用流保存很明显的没有回车换行 —_—!! */
                rbox.SaveFile(path, RichTextBoxStreamType.PlainText);
            }


            #region =★=*=★=*=★= 设置文件或目录的隐藏与只读属性 =★=*=★=*=★=
            /// <summary> 隐藏文件夹 </summary>
            /// <param name="path">文件名(包含路径)</param>
            public void roHidDir(string path)
            {
                DirectoryInfo dir = new DirectoryInfo(path);
                File.SetAttributes(path, dir.Attributes | FileAttributes.Hidden & ~FileAttributes.ReadOnly);
            }
            /// <summary> 设置文件隐藏只读 </summary>
            /// <param name="path">文件名(包含路径)</param>
            public void roHidFile(string path)
            {
                FileInfo fi = new FileInfo(path);
                File.SetAttributes(path, fi.Attributes | FileAttributes.Hidden | FileAttributes.ReadOnly);
            }
            /// <summary> 取消文件夹的隐藏只读属性 </summary>
            /// <param name="path">文件名(包含路径)</param>
            public void roHidDirNudo(string path)
            {
                DirectoryInfo di = new DirectoryInfo(path);
                if (di.Exists)
                { File.SetAttributes(path, di.Attributes & ~FileAttributes.ReadOnly & ~FileAttributes.Hidden); }
            }
            /// <summary> 取消文件的只读、隐藏属性 </summary>
            /// <param name="path">文件名(包含路径)</param>
            public void roHidFileNudo(string path)
            {
                FileInfo fi = new FileInfo(path);
                if (fi.Exists)
                { File.SetAttributes(path, fi.Attributes & ~FileAttributes.Hidden & ~FileAttributes.ReadOnly); }
                else
                {
                    string str = Path.GetFileName(path);
                    MessageBox.Show(string.Format("请检查\"{0}\"文件是否存在!", str));
                }
            }
            #endregion
        }

设置文件属性的时候要注意: 设置成隐藏与只读的时候用的是   " | " ;  取消隐藏只读的时候用的是:  " & "   ,方法前面还加了 "  ~ " 符号 ,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值