C#中File类的Copy()方法或FileInfo类的CopyTo()方法的参数overwrite取false和true的区别

当调用 `System.IO.File.Copy` 方法时,第三个参数 `overwrite` 控制着如果目标位置已经存在同名文件的情况下如何处理。

1、当 `overwrite` 设置为 `true`

在这种情况下,即使目标路径下已经有相同名称的文件,该方法也会无条件地覆盖现有的文件。这不会引发异常,并且会直接替换旧文件的内容。

string sourceFile = "C:\\tmp\\sourceFile.txt";//两种表示文件路径的方法
string destFile = @"C:\tmp\destFile.txt";


// 将会覆盖 test.txt 文件中的内容
// 1、File类的Copy()方法
System.IO.File.Copy(sourceFile, destFile, true);

// 2、FileInfo类的CopyTo()方法
FileInfo finfo = new FileInfo(sourceFile);
finfo.CopyTo(destFile ,true);

2、当 `overwrite` 设置为 `false`

此时,若目标路径中已有同名文件,则会发生异常 (`IOException`),因为不允许覆盖现有文件。此行为有助于防止意外的数据丢失或破坏。

string sourceFile = "C:\\tmp\\sourceFile.txt";//两种表示文件路径的方法
string destFile = @"C:\tmp\destFile.txt";
string destFileInfo = @"C:\tmp\destFileInfo.txt";

// 若 test.txt 已经存在,则抛出 IOException
// 1、File类的Copy()方法
try
{
    System.IO.File.Copy(sourceFile, destFile, false);
}
catch (System.IO.IOException ex)
{
    Console.WriteLine($"无法复制文件: {ex.Message}");
}

// 2、FileInfo类的CopyTo()方法
try
{
    FileInfo finfo = new FileInfo(sourceFile);
    finfo.CopyTo(destFileInfo, false);
}
catch (System.IO.IOException ex)
{
    Console.WriteLine($"无法复制文件: {ex.Message}");
}
Console.ReadLine();

3、测试程序

分别测试overwrite不同只与文件是否存在,可以分成四种情况

using System;
using System.IO;
using System.Windows;


namespace Test07
{
    class Program
    {
        static void Main(string[] args)
        {
            FileInfo finfo = new FileInfo("sourceFile.txt");         //实例化FileInfo对象

            //overwrite:是否存在=1:1=TRUE:Exist
            try
            {
                finfo.CopyTo("destFile_11.txt", overwrite: true);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);//简洁版报错
                MessageBox.Show(ex.ToString());//详细版报错
            }

            //overwrite:是否存在=0:1=false:Exist
            try
            {
                finfo.CopyTo("destFile_01.txt", overwrite: false);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                MessageBox.Show(ex.ToString());
            }

            //overwrite:是否存在=1:0=TRUE:NotExist
            try
            {
                finfo.CopyTo("destFile_10.txt", overwrite: true);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                MessageBox.Show(ex.ToString());
            }

            //overwrite:是否存在=0:0=false:NotExist
            try
            {
                finfo.CopyTo("destFile_00.txt", overwrite: false);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                MessageBox.Show(ex.ToString());
            }
            Console.ReadLine();
        }
    }
}

3.1、程序运行前

..\bin\Debug路径下的文件

①源文件【sourceFile.txt】,其内容为九九乘法表

1*1=1
1*2=2, 2*2=4
1*3=3, 2*3=6, 3*3=9
1*4=4, 2*4=8, 3*4=12, 4*4=16
1*5=5, 2*5=10, 3*5=15, 4*5=20, 5*5=25
1*6=6, 2*6=12, 3*6=18, 4*6=24, 5*6=30, 6*6=36
1*7=7, 2*7=14, 3*7=21, 4*7=28, 5*7=35, 6*7=42, 7*7=49
1*8=8, 2*8=16, 3*8=24, 4*8=32, 5*8=40, 6*8=48, 7*8=56, 8*8=64
1*9=9, 2*9=18, 3*9=27, 4*9=36, 5*9=45, 6*9=54, 7*9=63, 8*9=72, 9*9=81

 ②目标文件【destFile_01.txt】,其内容为文件名

 ②目标文件【destFile_11.txt】,其内容为文件名

3.2、程序运行中

3.3、程序运行后

..\bin\Debug路径下的文件

 参考

清华大学出版社-图书详情-《C#从入门到精通(第6版)》

叩响C#之门 (豆瓣)

C知道-开发者的首选AI搜索引擎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值