zoukankan      html  css  js  c++  java
  • Winform 基础知识 之文件夹操作

     

    using System.IO;

    /// <summary>
    /// 删除文件夹下所有文件
    /// </summary>
    /// <param name="dir"></param>
    public void DeleteFolder(string dir)
    {
    //如果存在这个文件夹删除之
    if (Directory.Exists(dir))
    {
    foreach (string d in Directory.GetFileSystemEntries(dir))
    {
    if (File.Exists(d))
    File.Delete(d);//直接删除其中的文件
    else DeleteFolder(d);//递归删除子文件夹
    }
    Directory.Delete(dir);
    //删除已空文件夹
    MessageBox.Show(dir + "文件夹删除成功");
    }
    else //如果文件夹不存在则提示
    MessageBox.Show(dir + "该文件夹不存在");
    }

    //========================================
    //实现一个静态方法将指定文件夹下面的所有内容Detele
    //测试的时候要小心操作,删除之后无法恢复。
    //========================================
    public static void DeleteDir(string aimPath)
    {
    try
    {
    //检查目标目录是否以目录分割字符结束如果不是则添加之
    if (aimPath[aimPath.Length - 1] !=
    Path.DirectorySeparatorChar)
    aimPath += Path.DirectorySeparatorChar;
    //得到源目录的文件列表,该里面是包含文件以及目录路径的一个数组
    //如果你指向Delete目标文件下面的文件而不包含目录请使用下面的方法
    //string[]fileList= Directory.GetFiles(aimPath);
    string[] fileList = Directory.GetFileSystemEntries(aimPath);
    //遍历所有的文件和目录
    foreach (string file in fileList)
    {
    //先当作目录处理如果存在这个
    //目录就递归Delete该目录下面的文件
    if (Directory.Exists(file))
    {
    DeleteDir(aimPath + Path.GetFileName(file));
    }
    //否则直接Delete文件
    else
    {
    File.Delete(aimPath + Path.GetFileName(file));
    }
    }
    //删除文件夹
    System.IO.Directory.Delete(aimPath, true);
    }
    catch (Exception e)
    {
    MessageBox.Show(e.ToString());
    }
    }

    ///拷贝文件夹(包括子文件夹)到指定文件夹下
    ///源文件夹和目标文件夹均需绝对路径
    ///格式:CopyFolder(源文件夹,目标文件夹)
    //----------------------------------------
    //作者 14
    //----------------------------------------
    /// <summary>
    /// 拷贝文件夹(包括子文件夹)到指定文件夹下
    /// 文件和文件夹分开复制,当是文件夹则递归复制
    /// </summary>
    /// <param name="strFromPath">待复制地址</param>
    /// <param name="strToPath">目标地址</param>
    public static void CopyFolder(string strFromPath,string strToPath)
    {
    //如果源文件夹不存在,则创建
    if (!Directory.Exists(strFromPath))
    {
    Directory.CreateDirectory(strFromPath);
    }
    //取得要拷贝的文件夹名
    string strFolderName = strFromPath.Substring(
    strFromPath.LastIndexOf("\") + 1,
    strFromPath.Length -
    strFromPath.LastIndexOf("\") - 1);
    //如果目标文件夹中没有源文件夹
    //则在目标文件夹中创建源文件夹
    if (!Directory.Exists(
    strToPath + "\" + strFolderName))
    {
    Directory.CreateDirectory(
    strToPath + "\" + strFolderName);
    }
    //创建数组保存源文件夹下的文件名
    string[] strFiles =
    Directory.GetFiles(strFromPath);
    //循环拷贝文件
    for (int i = 0; i < strFiles.Length; i++)
    {
    //取得拷贝的文件名,只取文件名,地址截掉。
    string strFileName = strFiles[i].Substring(
    strFiles[i].LastIndexOf("\") + 1,
    strFiles[i].Length -
    strFiles[i].LastIndexOf("\") - 1);
    //开始拷贝文件,true表示覆盖同名文件
    File.Copy(
    strFiles[i],
    strToPath + "\" + strFolderName +
    "\" + strFileName,
    true);
    }
    //创建DirectoryInfo实例
    DirectoryInfo dirInfo =
    new DirectoryInfo(strFromPath);
    //取得源文件夹下的所有子文件夹名称
    DirectoryInfo[] ZiPath =
    dirInfo.GetDirectories();
    for (int j = 0; j < ZiPath.Length; j++)
    {
    //获取所有子文件夹名
    string strZiPath = strFromPath + "\" +
    ZiPath[j].ToString();
    //把得到的子文件夹当成新的
    //源文件夹,从头开始新一轮的拷贝
    CopyFolder(
    strZiPath,
    strToPath + "\" + strFolderName);
    }
    }

    //========================================
    //实现一个静态方法将指定文件夹下面的所有
    //内容copy到目标文件夹下面
    //如果目标文件夹为只读属性就会报错
    //========================================
    public void CopyDir(string srcPath, string aimPath)
    {
    try
    {
    //检查目标目录是否以目录分割字符
    //结束如果不是则添加之
    if (aimPath[aimPath.Length - 1] != Path.DirectorySeparatorChar)
    aimPath += Path.DirectorySeparatorChar;
    //判断目标目录是否存在如果不存在则新建之
    if (!Directory.Exists(aimPath))
    Directory.CreateDirectory(aimPath);
    //得到源目录的文件列表,该里面是包含
    //文件以及目录路径的一个数组
    //如果你指向copy目标文件下面的文件
    //而不包含目录请使用下面的方法
    //string[]fileList= Directory.GetFiles(srcPath);
    string[] fileList =
    Directory.GetFileSystemEntries(srcPath);
    //遍历所有的文件和目录
    foreach (string file in fileList)
    {
    //先当作目录处理如果存在这个
    //目录就递归Copy该目录下面的文件
    if (Directory.Exists(file))
    CopyDir(
    file,
    aimPath + Path.GetFileName(file));
    //否则直接Copy文件
    else
    File.Copy(
    file,
    aimPath + Path.GetFileName(file),
    true);
    }
    }
    catch (Exception e)
    {
    MessageBox.Show(e.ToString());
    }
    }

    上面说的删除方法,会把目录本身删了。

    如下面这个地址:string opath = @"C:Documents and SettingsAdministrator桌面211";

    执行上面删除方法,会把C:Documents and SettingsAdministrator桌面211中的211这个文件夹也删了,如果不想删,就用下面这个方法,n等于1的时候就不删。

    //========================================
    //实现一个静态方法将指定文件夹下面的所有内容Detele
    //测试的时候要小心操作,删除之后无法恢复。
    //========================================
    public static void DeleteDir(string aimPath, int n)
    {
    try
    {
    //检查目标目录是否以目录分割字符结束如果不是则添加之
    if (aimPath[aimPath.Length - 1] !=
    Path.DirectorySeparatorChar)
    aimPath += Path.DirectorySeparatorChar;
    //得到源目录的文件列表,该里面是包含文件以及目录路径的一个数组
    //如果你指向Delete目标文件下面的文件而不包含目录请使用下面的方法
    string[] fileList = Directory.GetFiles(aimPath);
    //string[] fileList = Directory.GetFileSystemEntries(aimPath);
    //遍历所有的文件和目录
    foreach (string file in fileList)
    {
    //先当作目录处理如果存在这个
    //目录就递归Delete该目录下面的文件
    if (Directory.Exists(file))
    {
    DeleteDir(aimPath + Path.GetFileName(file), n);
    }
    //否则直接Delete文件
    else
    {
    File.Delete(aimPath + Path.GetFileName(file));
    }
    }
    //删除文件夹
    if (n == 1)
    {
    DirectoryInfo dirInfo = new DirectoryInfo(aimPath);
    //取得源文件夹下的所有子文件夹名称
    DirectoryInfo[] ZiPath = dirInfo.GetDirectories();
    for (int j = 0; j < ZiPath.Length; j++)
    {
    //获取子文件夹名
    string strZiPath = aimPath + "\" + ZiPath[j].ToString();
    //删除当前文件夹
    System.IO.Directory.Delete(strZiPath, true);
    }
    }
    else
    {
    System.IO.Directory.Delete(aimPath, true);
    }
    }
    catch (Exception e)
    {
    MessageBox.Show(e.ToString());
    }
    }

    http://blog.csdn.net/jingdian14/article/details/7923470

  • 相关阅读:
    I NEED A OFFER!
    水题 Codeforces Round #303 (Div. 2) A. Toy Cars
    模拟 HDOJ 5099 Comparison of Android versions
    模拟 HDOJ 5095 Linearization of the kernel functions in SVM
    贪心 HDOJ 5090 Game with Pearls
    Kruskal HDOJ 1863 畅通工程
    Kruskal HDOJ 1233 还是畅通工程
    并查集 HDOJ 1232 畅通工程
    DFS/并查集 Codeforces Round #286 (Div. 2) B
    水题 Codeforces Round #286 (Div. 2) A Mr. Kitayuta's Gift
  • 原文地址:https://www.cnblogs.com/androllen/p/3509218.html
Copyright © 2011-2022 走看看