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