共用方式為


File.Copy 方法

定義

將現有的檔案複製到新的檔案。

多載

Copy(String, String)

將現有的檔案複製到新的檔案。 不允許覆寫同名的檔案。

Copy(String, String, Boolean)

將現有的檔案複製到新的檔案。 允許覆寫相同名稱的檔案。

Copy(String, String)

來源:
File.cs
來源:
File.cs
來源:
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

目的地檔案的名稱。 這不能是目錄或現有的檔案。

例外狀況

呼叫端沒有必要的許可權。

sourceFileNamedestFileName 是長度為零的字串、只包含空格符,或包含一或多個無效字元。 您可以使用 GetInvalidPathChars() 方法來查詢無效的字元。

-或-

sourceFileNamedestFileName 指定目錄。

sourceFileNamedestFileNamenull

指定的路徑、檔名或兩者都超過系統定義的最大長度。

sourceFileNamedestFileName 中指定的路徑無效(例如,它位於未對應的磁碟驅動器上)。

找不到 sourceFileName

destFileName 存在。

-或-

發生 I/O 錯誤。

sourceFileNamedestFileName 格式無效。

範例

下列範例會將檔案複製到 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

sourceFileNamedestFileName 參數可以指定相對或絕對路徑資訊。 相對路徑資訊會解譯為相對於目前工作目錄。 若要取得目前的工作目錄,請參閱 Directory.GetCurrentDirectory 方法。 此方法不支持參數中的通配符。

源檔的屬性會保留在複製的檔案中。

另請參閱

適用於

Copy(String, String, Boolean)

來源:
File.cs
來源:
File.cs
來源:
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 是唯讀的。

-或-

overwritetruedestFileName 存在且隱藏,但 sourceFileName 不會隱藏。

sourceFileNamedestFileName 是長度為零的字串、只包含空格符,或包含一或多個無效字元。 您可以使用 GetInvalidPathChars() 方法來查詢無效的字元。

-或-

sourceFileNamedestFileName 指定目錄。

sourceFileNamedestFileNamenull

指定的路徑、檔名或兩者都超過系統定義的最大長度。

sourceFileNamedestFileName 中指定的路徑無效(例如,它位於未對應的磁碟驅動器上)。

找不到 sourceFileName

destFileName 存在,且 overwritefalse

-或-

發生 I/O 錯誤。

sourceFileNamedestFileName 格式無效。

範例

下列範例會將檔案複製到 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

備註

sourceFileNamedestFileName 參數可以指定相對或絕對路徑資訊。 相對路徑資訊會解譯為相對於目前工作目錄。 此方法不支持參數中的通配符。

源檔的屬性會保留在複製的檔案中。

如需一般 I/O 工作的清單,請參閱 一般 I/O 工作

另請參閱

適用於