C#之文件和文件夹操作----实现移动文件和文件夹

通过一个具体的案例来深入了解文件操作和文件夹操作:

文件操作管理类:
功能:

  1. 创建文件:
    输入exit返回上一级,输入指定路径,创建新文件,路径存在就选择是否覆盖或者重新输入;
  2. 删除文件:
    输入exit返回上一级,输入指定路径,判断该路径是否存在,存在就删除该文件,不存在就重新输入;
  3. 查看文件:
    1)查看文件信息:名字,创建时间,最后修改时间,字节大小
    2)查看文件内容(doc,txt都可以查看,其他类型不可以);

  4. 修改文件:
    1)修改文件中的某个内容(doc,txt):例如把里面所有的“1”改成“2”;
    2)修改文件的名字

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Text.RegularExpressions;

namespace _文件操作
{
    class FileTest
    {
        static void Main1()
        {
            FileManage file = new FileManage();
            while (true)
            {
                Console.WriteLine("\t文件操作管理");
                Console.WriteLine("1、创建文件\t2、删除文件");
                Console.WriteLine("3、查看文件\t4、修改文件");
                Console.WriteLine("输入操作序号:");
                switch (Console.ReadLine())
                {
                    case "1":
                        file.CreatFile();
                        break;
                    case "2":
                        file.DeleteFile();
                        break;
                    case "3":
                        file.ReadFile();
                        break;
                    case "4":
                        file.UpdateFile();
                        break;
                    default:
                        break;
                }
            }
        }
    }
    ///<summary>
    ///文件管理类
    ///</summary>
    class FileManage
    {
        /// <summary>
        /// 创建文件
        /// 输入exit返回上一级,输入指定路径,创建新文件,路径存在就选择是否覆盖或者重新输入;
        /// 测试路径:C:\Users\ZPC\Desktop\Hello.txt
        /// </summary>
        public void CreatFile()
        {
            while (true)
            {
                string path = InputJudge();
                if (path.Equals("exit")) break;
                if (File.Exists(path))
                {
                    Console.WriteLine("路径存在,1、覆盖,2、重新输入");
                    string str = Console.ReadLine();
                    if (str.Equals("1"))
                    {
                        File.Create(path).Close();
                        Console.WriteLine("文件创建成功");
                        break;
                    }
                    else
                        continue;
                }
                else
                {
                    try
                    {
                        File.Create(path).Close();
                        Console.WriteLine("文件创建成功");
                        break;
                    }
                    catch (Exception)
                    {
                        Console.WriteLine("路径有误");
                    }
                }
            }
        }
        /// <summary>
        /// 删除文件
        /// 输入exit返回上一级,输入指定路径,判断该路径是否存在,存在就删除该文件,不存在就重新输入;
        /// </summary>
        public void DeleteFile()
        {
            while (true)
            {
                string path = InputJudge();
                if (path.Equals("exit")) return;
                if (File.Exists(path))
                {
                    Console.WriteLine("文件存在,1、删除  2、重新输入");
                    string str = Console.ReadLine();
                    if (str.Equals("1"))
                    {
                        File.Delete(path);
                        Console.WriteLine("文件删除成功");
                        return;
                    }
                }
                else
                {
                    Console.WriteLine("文件不存在");
                }
            }
        }
        /// <summary>
        /// 查看文件
        /// 1)查看文件信息:名字,创建时间,最后修改时间,字节大小
        /// 2)查看文件内容(doc,txt都可以查看,其他类型不可以);
        /// </summary>
        public void ReadFile()
        {
            while (true)
            {
                string path = InputJudge();
                if (path.Equals("exit")) break;
                if (File.Exists(path))
                {
                    Console.WriteLine("查看文件");
                    Console.WriteLine("1、查看文件信息  2、查看文件内容");
                    switch (Console.ReadLine())
                    {
                        case "1":
                            ReadFileInfo(path);
                            break;
                        case "2":
                            ReadFileContent(path);
                            break;
                        default:
                            break;
                    }
                }
                else
                {
                    Console.WriteLine("文件不存在");
                }
            }

        }
        /// <summary>
        /// 查看文件信息
        ///     名字,创建时间,最后修改时间,字节大小
        /// </summary>
        /// <param name="path">文件路径</param>
        private void ReadFileInfo(string path)
        {
            FileInfo fileInfo = new FileInfo(path);
            Console.WriteLine("名字:"+fileInfo.Name);
            Console.WriteLine("创建时间:"+ fileInfo.CreationTime);
            Console.WriteLine("最后修改时间:"+ fileInfo.LastWriteTime);
            Console.WriteLine("字节大小:"+fileInfo.Length);
        }
        /// <summary>
        /// 查看文件内容
        ///     doc,txt都可以查看,其他类型不可以
        /// </summary>
        /// <param name="path">文件路径</param>
        private void ReadFileContent(string path)
        {
            byte[] bt = File.ReadAllBytes(path);
            //将文件中的内容读取到字节数组中
            string value = Encoding.Default.GetString(bt);
            Console.WriteLine(value);
        }
        /// <summary>
        /// 修改文件
        /// 1)修改文件中的某个内容(doc,txt):例如把里面所有的“1”改成“2”;
        /// 2)修改文件的名字
        /// </summary>
        public void UpdateFile()
        {
            while (true)
            {
                string path = InputJudge();
                if (path.Equals("exit")) break;
                if (File.Exists(path))
                {
                    Console.WriteLine("修改文件");
                    Console.WriteLine("1、修改文件某个内容  2、修改文件的名字");
                    switch (Console.ReadLine())
                    {
                        case "1":
                            UpdateFileContent(path);
                            break;
                        case "2":
                            UpdateFileName(path);
                            break;
                        case "3":
                            AddToContent(path);
                            break;
                        default:
                            break;
                    }
                }
                else
                    Console.WriteLine("文件不存在");
            }
        }
        /// <summary>
        /// 以追加的方式添加内容
        /// </summary>
        /// <param name="path"></param>
        private void AddToContent(string path)
        {
            //FileStream addContent = new FileStream(path,FileMode.Append);
            Console.WriteLine("此功能暂未实现");
        }
        /// <summary>
        /// 修改文件名字
        /// </summary>
        /// <param name="path"></param>
        private void UpdateFileName(string path)
        {
            //实例化文件对象
            FileInfo fileInfo = new FileInfo(path);
            //根据路径拆分出路径前缀
            int index = path.LastIndexOf(@"\");
            string name = "";
            for (int i = 0; i <= index; i++)
            {
                name += path[i];
            }
            Console.WriteLine(name);
            while (true)
            {
                Console.WriteLine("请输入修改的名字:");
                //将路径前缀拼接到文件名上
                string upName = name + Console.ReadLine();
                Console.WriteLine(upName);
                try
                {
                    File.Move(path, upName);
                }
                catch (Exception)
                {
                    Console.WriteLine("文件名输入错误");
                }
                break;
            }
        }
        /// <summary>
        /// 修改文件中的某个内容(doc,txt):例如把里面所有的“1”改成“2”
        /// </summary>
        /// <param name="path"></param>
        private void UpdateFileContent(string path)
        {
            //将文件中的内容转化成字符串
            byte[] bt = File.ReadAllBytes(path);
            string value = Encoding.Default.GetString(bt);
            Console.WriteLine("文件内容:"+value.Length);
            Console.WriteLine(value);
            //使用字符串进行内容替换
            while (true)
            {
                Console.WriteLine("输入要替换的内容:");
                string upStr = Console.ReadLine();        //要修改的内容
                //判断该内容是否存在
                if (value.Contains(upStr))
                {
                    Console.WriteLine("输入替换的内容:");
                    string reStr = Console.ReadLine();      //替换的内容
                    //将内容替换成输入的内容并返回新的字符串
                    string newValue = value.Replace(upStr, reStr);
                    byte[] newBt = Encoding.Default.GetBytes(newValue);
                    Console.WriteLine(newValue);
                    //将字节数组写入文件
                    File.WriteAllBytes(path,newBt);
                    break;
                }
            }
        }
        /// <summary>
        /// 判断输入的字符串是否符合路径规则
        /// </summary>
        /// <returns></returns>
        public string InputJudge()
        {
            string path = "";
            while (true)
            {
                Console.WriteLine("请输入文件路径(exit返回上一级):");
                path = Console.ReadLine();
                //"([^<>/\\\\|:\"\"\\*\\?]+)\\.\\w+$+"
                //([^<>/\\\|:""\*\?]+\.\w+$)
                //([^<>/\\\|:""\*\?]+)\.\w+$
                //[^/\\\\<>*?|\"]+\\.[^/\\\\<>*?|\"]+
                //@"^[^\\/:\*\?""<>|]{1,120}$"
                //@"^([a-zA-Z]:\\)?[^\/\:\*\?\""\<\>\|\,]*$"
                Regex regex = new Regex(@"^([a-zA-Z]:\\)?[^\`\~\!\@\#\$\%\^\&\-\+\/\:\*\?\""\<\>\|\,\;\{\}\[\]\(\)]*$");
                if (path.Equals("exit")) break;
                int index = path.LastIndexOf(".");
                if (index > 0)
                {
                    if (!regex.IsMatch(path))
                    {
                        Console.WriteLine("文件名包含不合法字符");
                        continue;
                    }
                    string newPath = path.Substring(index);
                    if (newPath.Equals(".txt") || newPath.Equals(".doc"))
                    {
                        break;
                    }
                }
                else
                {
                    Console.WriteLine("请加上文件扩展名(.txt或者.doc)");
                }
            }
            return path;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_29266497/article/details/81209756