File.Copy 方法 
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
将现有文件复制到新文件。
重载
| Copy(String, String) | 
						 将现有文件复制到新文件。 不允许覆盖同名文件。  | 
        	
| Copy(String, String, Boolean) | 
						 将现有文件复制到新文件。 允许覆盖同名文件。  | 
        	
Copy(String, String)
- Source:
 - File.cs
 
- Source:
 - File.cs
 
- Source:
 - File.cs
 
将现有文件复制到新文件。 不允许覆盖同名文件。
public:
 static void Copy(System::String ^ sourceFileName, System::String ^ destFileName);
	public static void Copy (string sourceFileName, string destFileName);
	static member Copy : string * string -> unit
	Public Shared Sub Copy (sourceFileName As String, destFileName As String)
	参数
- sourceFileName
 - String
 
要复制的文件。
- destFileName
 - String
 
目标文件的名称。 这不能是目录或现有文件。
例外
调用方没有所需的权限。
              sourceFileName 或 destFileName 是长度为零的字符串,仅包含空格,或包含一个或多个无效字符。 可以使用 GetInvalidPathChars() 方法查询无效字符。
-或-
              sourceFileName 或 destFileName 指定目录。
              sourceFileName 或 destFileNamenull。
指定的路径、文件名或两者都超过了系统定义的最大长度。
在 sourceFileName 或 destFileName 中指定的路径无效(例如,它位于未映射的驱动器上)。
找不到 sourceFileName。
              sourceFileName 或 destFileName 格式无效。
示例
以下示例将文件复制到 C:\archives\2008 备份文件夹。 它使用 Copy 方法的两个重载,如下所示:
它首先使用 File.Copy(String, String) 方法重载复制文本(.txt)文件。 该代码演示此重载不允许覆盖已复制的文件。
然后,它使用 File.Copy(String, String, Boolean) 方法重载复制图片(.jpg 文件)。 该代码演示此重载确实允许覆盖已复制的文件。
string sourceDir = @"c:\current";
string backupDir = @"c:\archives\2008";
try
{
    string[] picList = Directory.GetFiles(sourceDir, "*.jpg");
    string[] txtList = Directory.GetFiles(sourceDir, "*.txt");
    // Copy picture files.
    foreach (string f in picList)
    {
        // Remove path from the file name.
        string fName = f.Substring(sourceDir.Length + 1);
        // Use the Path.Combine method to safely append the file name to the path.
        // Will overwrite if the destination file already exists.
        File.Copy(Path.Combine(sourceDir, fName), Path.Combine(backupDir, fName), true);
    }
    // Copy text files.
    foreach (string f in txtList)
    {
        // Remove path from the file name.
        string fName = f.Substring(sourceDir.Length + 1);
        try
        {
            // Will not overwrite if the destination file already exists.
            File.Copy(Path.Combine(sourceDir, fName), Path.Combine(backupDir, fName));
        }
        // Catch exception if the file was already copied.
        catch (IOException copyError)
        {
            Console.WriteLine(copyError.Message);
        }
    }
    // Delete source files that were copied.
    foreach (string f in txtList)
    {
        File.Delete(f);
    }
    foreach (string f in picList)
    {
        File.Delete(f);
    }
}
catch (DirectoryNotFoundException dirNotFound)
{
    Console.WriteLine(dirNotFound.Message);
}
let sourceDir = @"c:\current"
let backupDir = @"c:\archives\2008"
try
    let picList = Directory.GetFiles(sourceDir, "*.jpg")
    let txtList = Directory.GetFiles(sourceDir, "*.txt")
    // Copy picture files.
    for f in picList do
        // Remove path from the file name.
        let fName = f.Substring(sourceDir.Length + 1)
        // Use the Path.Combine method to safely append the file name to the path.
        // Will overwrite if the destination file already exists.
        File.Copy(Path.Combine(sourceDir, fName), Path.Combine(backupDir, fName), true)
    // Copy text files.
    for f in txtList do
        // Remove path from the file name.
        let fName = f.Substring(sourceDir.Length + 1)
        try
            // Will not overwrite if the destination file already exists.
            File.Copy(Path.Combine(sourceDir, fName), Path.Combine(backupDir, fName))
        // Catch exception if the file was already copied.
        with
        | :? IOException as copyError -> printfn $"{copyError.Message}"
    // Delete source files that were copied.
    for f in txtList do
        File.Delete f
    for f in picList do
        File.Delete f
// Catch exception if the file was already copied.
with
| :? DirectoryNotFoundException as dirNotFound -> printfn $"{dirNotFound.Message}"
Dim sourceDir As String = "c:\current"
Dim backupDir As String = "c:\archives\2008"
Try
    Dim picList As String() = Directory.GetFiles(sourceDir, "*.jpg")
    Dim txtList As String() = Directory.GetFiles(sourceDir, "*.txt")
    ' Copy picture files.
    For Each f As String In picList
        'Remove path from the file name.
        Dim fName As String = f.Substring(sourceDir.Length + 1)
        ' Use the Path.Combine method to safely append the file name to the path.
        ' Will overwrite if the destination file already exists.
        File.Copy(Path.Combine(sourceDir, fName), Path.Combine(backupDir, fName), True)
    Next
    ' Copy text files.
    For Each f As String In txtList
        'Remove path from the file name.
        Dim fName As String = f.Substring(sourceDir.Length + 1)
        Try
            ' Will not overwrite if the destination file already exists.
            File.Copy(Path.Combine(sourceDir, fName), Path.Combine(backupDir, fName))
            ' Catch exception if the file was already copied.
        Catch copyError As IOException
            Console.WriteLine(copyError.Message)
        End Try
    Next
    For Each f As String In txtList
        File.Delete(f)
    Next
    For Each f As String In picList
        File.Delete(f)
    Next
Catch dirNotFound As DirectoryNotFoundException
    Console.WriteLine(dirNotFound.Message)
End Try
    	注解
此方法等效于 Copy(String, String, Boolean) 方法重载,overwrite 参数设置为 false。
              sourceFileName 和 destFileName 参数可以指定相对路径或绝对路径信息。 相对路径信息解释为相对于当前工作目录。 若要获取当前工作目录,请参阅 Directory.GetCurrentDirectory 方法。 此方法不支持参数中的通配符。
原始文件的属性保留在复制的文件中。
另请参阅
适用于
Copy(String, String, Boolean)
- Source:
 - File.cs
 
- Source:
 - File.cs
 
- Source:
 - File.cs
 
将现有文件复制到新文件。 允许覆盖同名文件。
public:
 static void Copy(System::String ^ sourceFileName, System::String ^ destFileName, bool overwrite);
	public static void Copy (string sourceFileName, string destFileName, bool overwrite);
	static member Copy : string * string * bool -> unit
	Public Shared Sub Copy (sourceFileName As String, destFileName As String, overwrite As Boolean)
	参数
- sourceFileName
 - String
 
要复制的文件。
- destFileName
 - String
 
目标文件的名称。 这不能是目录。
- overwrite
 - Boolean
 
如果目标文件已存在,则 true 替换目标文件;否则,false。
例外
调用方没有所需的权限。
-或-
              destFileName 为只读。
-或-
              overwrite
              true,destFileName 存在且隐藏,但 sourceFileName 不隐藏。
              sourceFileName 或 destFileName 是长度为零的字符串,仅包含空格,或包含一个或多个无效字符。 可以使用 GetInvalidPathChars() 方法查询无效字符。
-或-
              sourceFileName 或 destFileName 指定目录。
              sourceFileName 或 destFileNamenull。
指定的路径、文件名或两者都超过了系统定义的最大长度。
在 sourceFileName 或 destFileName 中指定的路径无效(例如,它位于未映射的驱动器上)。
找不到 sourceFileName。
              sourceFileName 或 destFileName 格式无效。
示例
以下示例将文件复制到 C:\archives\2008 备份文件夹。 它使用 Copy 方法的两个重载,如下所示:
- 它首先使用 File.Copy(String, String) 方法重载复制文本(.txt)文件。 该代码演示此重载不允许覆盖已复制的文件。
 
然后,它使用 File.Copy(String, String, Boolean) 方法重载复制图片(.jpg 文件)。 该代码演示此重载确实允许覆盖已复制的文件。
string sourceDir = @"c:\current";
string backupDir = @"c:\archives\2008";
try
{
    string[] picList = Directory.GetFiles(sourceDir, "*.jpg");
    string[] txtList = Directory.GetFiles(sourceDir, "*.txt");
    // Copy picture files.
    foreach (string f in picList)
    {
        // Remove path from the file name.
        string fName = f.Substring(sourceDir.Length + 1);
        // Use the Path.Combine method to safely append the file name to the path.
        // Will overwrite if the destination file already exists.
        File.Copy(Path.Combine(sourceDir, fName), Path.Combine(backupDir, fName), true);
    }
    // Copy text files.
    foreach (string f in txtList)
    {
        // Remove path from the file name.
        string fName = f.Substring(sourceDir.Length + 1);
        try
        {
            // Will not overwrite if the destination file already exists.
            File.Copy(Path.Combine(sourceDir, fName), Path.Combine(backupDir, fName));
        }
        // Catch exception if the file was already copied.
        catch (IOException copyError)
        {
            Console.WriteLine(copyError.Message);
        }
    }
    // Delete source files that were copied.
    foreach (string f in txtList)
    {
        File.Delete(f);
    }
    foreach (string f in picList)
    {
        File.Delete(f);
    }
}
catch (DirectoryNotFoundException dirNotFound)
{
    Console.WriteLine(dirNotFound.Message);
}
let sourceDir = @"c:\current"
let backupDir = @"c:\archives\2008"
try
    let picList = Directory.GetFiles(sourceDir, "*.jpg")
    let txtList = Directory.GetFiles(sourceDir, "*.txt")
    // Copy picture files.
    for f in picList do
        // Remove path from the file name.
        let fName = f.Substring(sourceDir.Length + 1)
        // Use the Path.Combine method to safely append the file name to the path.
        // Will overwrite if the destination file already exists.
        File.Copy(Path.Combine(sourceDir, fName), Path.Combine(backupDir, fName), true)
    // Copy text files.
    for f in txtList do
        // Remove path from the file name.
        let fName = f.Substring(sourceDir.Length + 1)
        try
            // Will not overwrite if the destination file already exists.
            File.Copy(Path.Combine(sourceDir, fName), Path.Combine(backupDir, fName))
        // Catch exception if the file was already copied.
        with
        | :? IOException as copyError -> printfn $"{copyError.Message}"
    // Delete source files that were copied.
    for f in txtList do
        File.Delete f
    for f in picList do
        File.Delete f
// Catch exception if the file was already copied.
with
| :? DirectoryNotFoundException as dirNotFound -> printfn $"{dirNotFound.Message}"
Dim sourceDir As String = "c:\current"
Dim backupDir As String = "c:\archives\2008"
Try
    Dim picList As String() = Directory.GetFiles(sourceDir, "*.jpg")
    Dim txtList As String() = Directory.GetFiles(sourceDir, "*.txt")
    ' Copy picture files.
    For Each f As String In picList
        'Remove path from the file name.
        Dim fName As String = f.Substring(sourceDir.Length + 1)
        ' Use the Path.Combine method to safely append the file name to the path.
        ' Will overwrite if the destination file already exists.
        File.Copy(Path.Combine(sourceDir, fName), Path.Combine(backupDir, fName), True)
    Next
    ' Copy text files.
    For Each f As String In txtList
        'Remove path from the file name.
        Dim fName As String = f.Substring(sourceDir.Length + 1)
        Try
            ' Will not overwrite if the destination file already exists.
            File.Copy(Path.Combine(sourceDir, fName), Path.Combine(backupDir, fName))
            ' Catch exception if the file was already copied.
        Catch copyError As IOException
            Console.WriteLine(copyError.Message)
        End Try
    Next
    For Each f As String In txtList
        File.Delete(f)
    Next
    For Each f As String In picList
        File.Delete(f)
    Next
Catch dirNotFound As DirectoryNotFoundException
    Console.WriteLine(dirNotFound.Message)
End Try
    	注解
              sourceFileName 和 destFileName 参数可以指定相对路径或绝对路径信息。 相对路径信息解释为相对于当前工作目录。 此方法不支持参数中的通配符。
原始文件的属性保留在复制的文件中。
有关常见 I/O 任务的列表,请参阅 常见 I/O 任务。