C#文件操作

目录

一、文件夹创建

二、Path 路径配置

三、文件读写

四、磁盘操作

五、文档序列化


一、文件夹创建

常用函数:

Directory.Exists(path)                       -- 此文件夹是否存在
Directory.CreateDirectory(path)     -- 创建文件夹
Directory.Move(path_a, path_b)     -- 文件夹剪切
Directory.Delete(path)                       -- 只可删除空文件夹,若删除非空文件夹,会报异常
Directory.Delete(path, true)              -- 删除文件夹,包括里面的文档 

例程: 

internal class Program
{
    static void Main(string[] args)
    {
        string path_A = @"C:\\Temp\\A";
        string path_B = @"C:\\Temp\\B";

        if (!Directory.Exists(path_A)) //若此文件夹不存在
        {
            Directory.CreateDirectory(path_A); //创建此文件夹
            Directory.Move(path_A, path_B); //A文件夹剪切成B
            Directory.Delete(path_B, true); //删除B文件夹 
        }
    }
}

二、Path 路径配置

 常用函数:

Path.GetPathRoot(path)               -- 获取根目录
Path.GetDirectoryName(path)     -- 获取文件路径名
Path.GetFileNameWithoutExtension(path) -- 获取文件名 不包含后缀
Path.GetExtension(path)               -- 获取文件后缀
Path.GetFileName(path)                 -- 获取文件名 包含后缀
Path.GetFullPath(path)                   -- 获取文件绝对路径
Path.ChangeExtension(path, "text") -- 修改文件后缀
Path.GetExtension(path)                -- 获取文件后缀
Path.Combine("C:\\搜狗浏览器\\", "aaaa.txt") -- 合并文件路径

Path.GetRandomFileName()           -- 获取随机文件名+后缀
Path.PathSeparator                           -- 分隔符
Path.VolumeSeparatorChar            -- 冒号
Path.AltDirectorySeparatorChar    -- 反斜杠

例程: 

internal class Program
{
    static void Main(string[] args)
    {
        string path = @"C:\搜狗浏览器\ldinst-41.exe.ttd";

        //获取根目录
        Console.WriteLine(Path.GetPathRoot(path)); //结果显示: C:\

        //获取文件路径名
        Console.WriteLine(Path.GetDirectoryName(path)); //结果显示: C:\搜狗浏览器

        //获取文件名 不包含后缀
        Console.WriteLine(Path.GetFileNameWithoutExtension(path));//结果显示: ldinst-41.exe

        //获取文件后缀
        Console.WriteLine(Path.GetExtension(path));//结果显示: .ttd

        //获取文件名 包含后缀
        Console.WriteLine( Path.GetFileName(path)); //结果显示: ldinst-41.exe.ttd

        //获取绝对路径
        Console.WriteLine(Path.GetFullPath(path));//结果显示: C:\搜狗浏览器\ldinst-41.exe.ttd

        //修改文件后缀
        Console.WriteLine(Path.ChangeExtension(path, "text"));//结果显示: C:\搜狗浏览器\ldinst-41.exe.text

        //合并路径
        Console.WriteLine(Path.Combine(Path.GetDirectoryName(path), "aaaa.txt"));//结果显示: C:\搜狗浏览器\aaaa.txt

        //获取随机文件名+后缀
        Console.WriteLine(Path.GetRandomFileName()); //结果显示: vjzle4pq.1v0

        Console.WriteLine(Path.PathSeparator); //分隔符
        Console.WriteLine(Path.VolumeSeparatorChar);//冒号
        Console.WriteLine(Path.AltDirectorySeparatorChar); //反斜杠

    }
}

三、文件读写

 常用函数:

File.Create(path)               -- 文档创建并清空
File.Copy(path_1,path_2) -- 文档复制
File.Delete(path_2)           -- 文档删除
File.Move(path_1,path_2) -- 文档剪切
File.AppendText(path)     -- 文档内容追加
File.ReadAllLine(path)     -- 文档读取所有行
File.ReadAllText(path)     -- 读取整个文档

FileStream.Write(bytes,0,bytes.Length) -- 一个个写
FileStream.Flush()   -- 刷新

StreamWriter.WriteLine(text) -- 写一行
StreamWrite.BaseStream.Write(bytes,0,bytes.Length) -- 一个个写
StreamWrite.Flush()  -- 刷新

例程: 

internal class Program
{
    static void Main(string[] args)
    {

        string path = "C:\\Temp\\A.txt";
        using (FileStream fs = File.Create(path))//创建并清空原有数据
        {
            byte[] bytes = Encoding.UTF8.GetBytes("我最最最爱你,你不知道吗\r\n");
            fs.Write(bytes, 0, bytes.Length); //一个个写
            fs.Flush();

        }
        using (StreamWriter sw = File.AppendText(path)) //流写入 -- 追加
        {
            string text = "我是你.......";
            sw.WriteLine(text);

            byte[] bytes = Encoding.UTF8.GetBytes("eeeeeeeee\r\n");
            sw.BaseStream.Write(bytes, 0, bytes.Length); //一个个写

            sw.Flush();
        }
        //File.OpenRead(path);等价
        using (FileStream fs = new FileStream(path, FileMode.Open)) //分批读取
        {
            byte[] bytes = new byte[1 * 1024];
            int count = fs.Read(bytes, 0, bytes.Length);
            string date = Encoding.UTF8.GetString(bytes, 0, count);
            Console.WriteLine(date);
        }

        foreach (string item in File.ReadAllLines(path)) //读取所有行,遍历
        {
            Console.WriteLine(item);
        }

        Console.WriteLine(File.ReadAllText(path)); //读取整个文本

        string path_1 = "C:\\Temp\\A.txt";
        string path_2 = "C:\\Temp\\B.txt";
        File.Copy(path_1, path_2); //文档复制
        File.Delete(path_2); //文档删除
        File.Move(path_1, path_2); //文档剪切

    }
}

四、磁盘操作

 常用函数:

DriveInfo.GetDrives() -- 获取当前所有磁盘
drive.IsReady              -- 磁盘是否可用
drive.DriveType          -- 获取磁盘类型
drive.Name                  -- 磁盘名称
drive.TotalSize            -- 磁盘总空间
drive.AvailableFreeSpace -- 磁盘剩余空间

例程: 

internal class Program
{
    static void Main(string[] args)
    {
        foreach (DriveInfo drive in DriveInfo.GetDrives())
        {
            if (drive.IsReady)
            {
                Console.WriteLine($"类型:{drive.DriveType}" +
                                  $"名称:{drive.Name}" +
                                  $"总空间:{drive.TotalSize / 1024 / 1024 / 1024}G " +
                                  $"剩余空间:{drive.AvailableFreeSpace / 1024 / 1024 / 1024} G");
            }
            else
            {
                Console.WriteLine($"类型:{drive.DriveType} is not ready");
            }
        }
    }
}

五、文档序列化

 常用函数:

二进制序列化
    BinaryFormatter.Serialize(stream, text)  -- 序列化成二进制,写入文档
    BinaryFormatter.Deserialize(stream)      --反序列化读出文档
    
XML序列化
    XmlSerializer.Serialize(stream, text)  -- 序列化成XML格式,写入文档
    XmlSerializer.Deserialize(stream)      --反序列化读取
    
Json序列化
    JsonConvert.SerializeObject(text)         -- 序列化
    JsonConvert.DeserializeObject(result) -- 反序列化

例程: 

internal class Program
{
    static void Main(string[] args)
    {
        string path = @"C:\Temp\C.txt";
        string text = "凄凄切切QQ群www";

        //---------------二进制序列化------------------------
        using (Stream stream = File.OpenWrite(path))
        {
            BinaryFormatter bf = new BinaryFormatter();
            //序列化文档
            bf.Serialize(stream, text);
        }
        using (Stream stream = File.OpenRead(path))
        {
            BinaryFormatter bf = new BinaryFormatter();
            //反序列化读取
            Console.WriteLine(bf.Deserialize(stream));
        }

        //---------------XML序列化------------------------
        using (Stream stream = File.OpenWrite(path))
        {
            XmlSerializer serializer = new XmlSerializer(typeof(string));
            //序列化文档
            serializer.Serialize(stream, text); 
        }
        using (Stream stream = File.OpenRead(path))
        {
            XmlSerializer serializer = new XmlSerializer(typeof(string));
            //反序列化读取
            Console.WriteLine(serializer.Deserialize(stream));
        }
        //---------------Json序列化------------------------
        string result = JsonConvert.SerializeObject(text); //序列化
        Console.WriteLine(result);

        Console.WriteLine(JsonConvert.DeserializeObject(result)); //反序列化
    }
}

如有错误,烦请批评指正

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#文件操作中的相对路径是指相对于当前工作目录的路径。当前工作目录是指程序运行时所在的目录。在C#中,可以使用System.IO.Path类的一些方法来处理文件路径操作。具体来说,可以使用Path类的Combine方法来拼接路径,使用GetDirectoryName方法来获取路径的目录部分,使用GetFileName方法来获取路径的文件名部分,使用GetExtension方法来获取路径的扩展名部分等等。 举个例子,假设当前工作目录是"D:\MyProject",而需要操作文件在该目录下的"Data"文件中的"sample.txt"文件。那么可以使用Path类的Combine方法来拼接路径,代码如下: string filePath = Path.Combine("Data", "sample.txt"); 这样就得到了相对路径"Data\sample.txt"。在进行文件操作时,可以使用这个相对路径来指定要操作文件。 需要注意的是,相对路径是相对于当前工作目录的,所以在不同的环境下,当前工作目录可能会有所不同。为了确保代码的可移植性,可以使用Path类的GetFullPath方法来获取完整的路径,代码如下: string fullPath = Path.GetFullPath(filePath); 这样就可以获取到"D:\MyProject\Data\sample.txt"这个完整的路径,无论当前工作目录是什么。 综上所述,C#文件操作中的相对路径是相对于当前工作目录的路径。可以使用Path类的一些方法来处理文件路径操作,如拼接路径、获取目录部分、获取文件名部分等。在进行文件操作时,可以使用相对路径来指定要操作文件。为了确保代码的可移植性,可以使用GetFullPath方法来获取完整的路径。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [浅析C#文件路径的操作](https://download.csdn.net/download/weixin_38715097/12790167)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [C#操作文件系统绝对路径和相对路径](https://download.csdn.net/download/zhwcd/10670331)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [C#中winform使用相对路径读取文件的方法](https://download.csdn.net/download/weixin_38660069/13991652)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值