File.Move(String, String) Metod

Definition

Flyttar en angiven fil till en ny plats, vilket ger möjlighet att ange ett nytt filnamn.

public:
 static void Move(System::String ^ sourceFileName, System::String ^ destFileName);
public static void Move(string sourceFileName, string destFileName);
static member Move : string * string -> unit
Public Shared Sub Move (sourceFileName As String, destFileName As String)

Parametrar

sourceFileName
String

Namnet på filen som ska flyttas. Kan innehålla en relativ eller absolut sökväg.

destFileName
String

Den nya sökvägen och namnet på filen.

Undantag

destFileName redan finns.

-eller-

Ett I/O-fel har uppstått, t.ex. när filen kopierades mellan diskvolymer.

sourceFileName hittades inte.

sourceFileName eller destFileName är null.

.NET Framework- och .NET Core-versioner som är äldre än 2.1: sourceFileName eller destFileName är en sträng med noll längd, innehåller endast tomt utrymme eller innehåller ogiltiga tecken. Du kan fråga efter ogiltiga tecken med hjälp GetInvalidPathChars() av metoden .

Anroparen har inte den behörighet som krävs.

Den angivna sökvägen, filnamnet eller båda överskrider den systemdefinierade maximala längden.

Sökvägen som anges i sourceFileName eller destFileName är ogiltig (till exempel på en ommappad enhet).

sourceFileName eller destFileName är i ett ogiltigt format.

Exempel

I följande exempel flyttas en fil.

using System;
using System.IO;

class Test
{
    public static void Main()
    {
        string path = @"c:\temp\MyTest.txt";
        string path2 = @"c:\temp2\MyTest.txt";
        try
        {
            if (!File.Exists(path))
            {
                // This statement ensures that the file is created,
                // but the handle is not kept.
                using (FileStream fs = File.Create(path)) {}
            }

            // Ensure that the target does not exist.
            if (File.Exists(path2))	
            File.Delete(path2);

            // Move the file.
            File.Move(path, path2);
            Console.WriteLine("{0} was moved to {1}.", path, path2);

            // See if the original exists now.
            if (File.Exists(path))
            {
                Console.WriteLine("The original file still exists, which is unexpected.");
            }
            else
            {
                Console.WriteLine("The original file no longer exists, which is expected.");
            }			
        }
        catch (Exception e)
        {
            Console.WriteLine("The process failed: {0}", e.ToString());
        }
    }
}
open System.IO

let path = @"c:\temp\MyTest.txt"
let path2 = @"c:\temp2\MyTest.txt"

if File.Exists path |> not then
    // This statement ensures that the file is created,
    // but the handle is not kept.
    use _ = File.Create path
    ()

// Ensure that the target does not exist.
if File.Exists path2 then
    File.Delete path2

// Move the file.
File.Move(path, path2)
printfn $"{path} was moved to {path2}."

// See if the original exists now.
if File.Exists path then
    printfn "The original file still exists, which is unexpected."
else
    printfn "The original file no longer exists, which is expected."
Imports System.IO
Imports System.Text

Public Class Test
    Public Shared Sub Main()
        Dim path As String = "c:\temp\MyTest.txt"
        Dim path2 As String = "c:\temp2\MyTest.txt"

        Try
            If File.Exists(path) = False Then
                ' This statement ensures that the file is created,
                ' but the handle is not kept.
                Dim fs As FileStream = File.Create(path)
                fs.Close()
            End If

            ' Ensure that the target does not exist.
            If File.Exists(path2) Then
                File.Delete(path2)
            End If

            ' Move the file.
            File.Move(path, path2)
            Console.WriteLine("{0} moved to {1}", path, path2)

            ' See if the original file exists now.
            If File.Exists(path) Then
                Console.WriteLine("The original file still exists, which is unexpected.")
            Else
                Console.WriteLine("The original file no longer exists, which is expected.")
            End If
        Catch e As Exception
            Console.WriteLine("The process failed: {0}", e.ToString())
        End Try
    End Sub
End Class

Kommentarer

Den här metoden fungerar mellan diskvolymer och genererar inget undantag om källan och målet är samma.

Observera att om du försöker ersätta en fil genom att flytta en fil med samma namn till katalogen genereras en IOException . Undvik det här problemet:

  • I .NET Core 3.0 och senare versioner kan du anropa Move(String, String, Boolean) ställa in parametern overwrite till true, vilket ersätter filen om den finns.

  • I alla .NET versioner kan du anropa Copy(String, String, Boolean) för att kopiera med överskrivning och sedan anropa Delete för att ta bort den överflödiga källfilen. Den här strategin är inte atomisk eftersom en system- eller programkrasch under Copy kan lämna en delvis skriven målfil, men den säkerställer att en (eventuellt ofullständig) fil alltid finns på målet.

  • I alla .NET versioner kan du anropa Delete(String) innan du anropar Move, vilket endast tar bort filen om den finns.

Argumenten sourceFileName och destFileName kan innehålla relativ eller absolut sökvägsinformation. Relativ sökvägsinformation tolkas som relativ till den aktuella arbetskatalogen. Information om hur du hämtar den aktuella arbetskatalogen finns i GetCurrentDirectory.

Att flytta filen mellan diskvolymer motsvarar att kopiera filen och ta bort den från källan om kopieringen lyckades.

Om du försöker flytta en fil mellan diskvolymer och filen används kopieras filen till målet, men den tas inte bort från källan.

En lista över vanliga I/O-uppgifter finns i Vanliga I/O-uppgifter.

Gäller för

Se även