c#文件操作

File


File类是一个静态类,可直接调用其方法成员
这里写图片描述
Creat()、Exists()、Delete()

using System;
using System.IO;
using System.Text;

namespace cchoop
{
    class Program
    {
        static void Main(string[] args)
        {
            string path = "D:/Test.txt";
            File.Create(path).Close();

            if (File.Exists(path))
            {
                File.Delete(path);
            }
        }
    }
}

WriteAllLines()、ReadAllLines()、ReadAllText()、WriteAllText()

using System;
using System.IO;
using System.Text;

namespace cchoop
{
    class Program
    {
        static void Main(string[] args)
        {
            string path = "D:/Test.txt";
            File.WriteAllLines(path, new string[] { "111", "222" });
            string text = File.ReadAllText(path);
            Console.WriteLine(text);
            File.WriteAllText(path, "333\r\n444");
            string[] strs = File.ReadAllLines(path);

            foreach (var item in strs)
            {
                Console.WriteLine(item);
            }
        }
    }
}

将一张图片的1/4复制到另一张图片(效果:目标图片显示1/4)
ReadAllBytes()、WriteAllBytes

using System;
using System.IO;
using System.Text;

namespace cchoop
{
    class Program
    {
        static void Main(string[] args)
        {
            string path = "D:/testPng.png";
            byte[] data = File.ReadAllBytes(path);

            byte[] dataWrite = new byte[data.Length / 4];
            Array.Copy(data, 0, dataWrite, 0, data.Length / 4);
            File.WriteAllBytes("C:/testPng.png", dataWrite);
            File.Move(path, "C:/testPng2.png");    //移动
        }
    }
}

FileInfo


提供操作文件的属性和实例方法
这里写图片描述这里写图片描述

using System;
using System.IO;
using System.Text;

namespace cchoop
{
    class Program
    {
        static void Main(string[] args)
        {
            string path = "D:/test.txt";
            FileInfo info = new FileInfo(path);
            if (!info.Exists)
            {
                Console.WriteLine("创建");
                info.Create();
                info.Refresh();

                Console.WriteLine("文件目录:" + info.DirectoryName);
                Console.WriteLine("文件字节长度:" + info.Length);
                Console.WriteLine("文件是否可读:" + info.IsReadOnly);
            }
            else
            {
                Console.WriteLine("删除");
                info.Delete();
            }

        }
    }
}

FileStream


文件流类FileStream公开了以文件为主的Stream,既支持同步读/写操作,也支持异步读/写操作,FileStream类的特点是操作字节和字节数组。这种方式不适合操作用字符数据构成的文本文件,适合处理非文本文件。FileStream类提供了对文件的低级而复杂的操作,因此能够实现更多高级的功能。

using System;
using System.IO;
using System.Text;

namespace cchoop
{
    class Program
    {
        static void Main(string[] args)
        {
            string path = "D:/test.txt";
            FileStream fileStreamWrite = new FileStream(path, FileMode.OpenOrCreate);
            string value = "我是Test";
            byte[] dataWrite = Encoding.UTF8.GetBytes(value);
            fileStreamWrite.Write(dataWrite, 0, dataWrite.Length);

            fileStreamWrite.Flush();
            fileStreamWrite.Close();
            fileStreamWrite = null;

            FileStream fileStreamRead = new FileStream(path, FileMode.OpenOrCreate);
            int length = (int)fileStreamRead.Length;
            Console.WriteLine(length);
            byte[] dataRead = new byte[length];
            fileStreamRead.Read(dataRead, 0, length);
            Console.WriteLine("读出的数据:" + Encoding.UTF8.GetString(dataRead));
            fileStreamRead.Close();
            fileStreamRead = null;
        }
    }
}

实例:控制台每输入一行就写到文件中,输入exit停止输入

using System;
using System.IO;
using System.Text;

namespace cchoop
{
    class Program
    {
        static void Main(string[] args)
        {
            string path = "D:/test.txt";
            FileStream fileStreamWrite = new FileStream(path, FileMode.OpenOrCreate);
            while (true)
            {
                string str = Console.ReadLine();

                if (str == "exit")
                {
                    break;
                }

                byte[] dataWrite = Encoding.UTF8.GetBytes(str + "\r\n");
                fileStreamWrite.Write(dataWrite, 0, dataWrite.Length);
                fileStreamWrite.Flush();
            }
            fileStreamWrite.Close();
            fileStreamWrite = null;
        }
    }
}

Directory和DirectoryInfo


打印一个路径下所有的子目录与子文件,并且每一个子级向后一个tab标志位,以此类推…

using System;
using System.IO;
using System.Text;

namespace cchoop
{
    class Program
    {
        public static void Main()
        {
            PrintDirectory("D:/test", 0);
        }
        public static void PirntFile(string path, int level)
        {
            if (Directory.Exists(path))
            {
                string[] files = Directory.GetFiles(path);
                foreach (string file in files)
                {
                    for (int i = 1; i < level; i++)
                    {
                        Console.Write("\t");
                    }
                    Console.WriteLine(file);
                }
            }
        }
        public static void PrintDirectory(string path, int level)
        {
            if (Directory.Exists(path))
            {
                level++;
                string[] zm = Directory.GetDirectories(path);
                foreach (string mulu in zm)
                {
                    for (int i = 1; i < level; i++)
                    {
                        Console.Write("\t");
                    }
                    Console.WriteLine(mulu);
                    PrintDirectory(mulu, level);
                }

            }
        }
    }
}

案例:将一个文件或者文件夹移动到一个新的目标路径

using System;
using System.IO;
using System.Text;

namespace cchoop
{
    class Program
    {
        public static void Main()
        {
            while (true)
            {
                Console.WriteLine("===========================================");
                Console.Write("请输入要移动的文件路径或目录的路径\n警告:请不要输入磁盘或重要的大型文件夹\n请输入:");
                string sourceDirName = Console.ReadLine();

                if (!IsExitsFileOrDirectory(sourceDirName))
                {
                    Console.WriteLine("路径有误,不存在该路径的文件或者目录,请重新输入!");
                    continue;
                }

                Console.Write("请输入要新位置的路径\n请输入:");
                string destDirName = Console.ReadLine();


                if (destDirName.Contains(sourceDirName))
                {
                    Console.WriteLine("非法操作:不可以将目标文件路径放入源文件子目录中");
                    continue;
                }

                //移动文件
                bool result = Move(sourceDirName, destDirName);

                if (result == false)
                {
                    Console.WriteLine("移动失败");
                    continue;
                }

                Console.WriteLine("移动成功!");
                //删除源文件
                //如果是文件
                if (File.Exists(sourceDirName))
                {
                    File.Delete(sourceDirName);
                }
                if (Directory.Exists(sourceDirName))
                {
                    //是目录
                    Directory.Delete(sourceDirName, true);
                }

                Console.WriteLine("是否继续移动文件?Y/N");
                while (true)
                {
                    string opStr = Console.ReadLine();
                    if (opStr == "Y" || opStr == "y")
                    {
                        break;
                    }
                    else if (opStr == "N" || opStr == "n")
                    {
                        return;
                    }
                }

            }
        }

        public static bool Move(string sourceDirName, string destDirName)
        {
            try
            {
                //如果是文件
                if (File.Exists(sourceDirName))
                {
                    File.Copy(sourceDirName, destDirName);
                }

                if (Directory.Exists(sourceDirName))
                {
                    //是目录
                    Directory.CreateDirectory(destDirName);
                    MoveDirectory(sourceDirName, destDirName);
                }
            }
            catch (ArgumentException)
            {
                Console.WriteLine("目标路径有误 !");
                return false;
            }
            catch (IOException)
            {
                Console.WriteLine("目标文件已经存在!");
                return false;
            }
            return true;
        }

        public static void MoveDirectory(string sourceDirName, string destDirName)
        {
            try
            {
                string[] dirs = Directory.GetDirectories(sourceDirName);
                foreach (var dir in dirs)
                {
                    string dirName = dir.Substring(dir.LastIndexOf('\\') + 1);
                    string newPath = destDirName + "\\" + dirName;
                    Directory.CreateDirectory(newPath);
                    MoveDirectory(dir, newPath);
                }

                string[] files = Directory.GetFiles(sourceDirName);
                foreach (var file in files)
                {
                    string fileName = file.Substring(file.LastIndexOf('\\') + 1);
                    File.Copy(file, destDirName + "\\" + fileName);
                }
            }
            catch (Exception)
            {
                Console.WriteLine("异常!");
            }
        }

        public static bool IsExitsFileOrDirectory(string path)
        {
            bool isExists = false;
            if (File.Exists(path) || Directory.Exists(path))
            {
                isExists = true;
            }
            return isExists;
        }
    }
}

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cchoop

有用的话请杯肥宅水

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值