FileInfo.MoveTo () vs File.Déplacer()

quelle Est la différence entre ces deux méthodes de déplacer un fichier?

System.IO.FileInfo f = new System.IO.FileInfo(@"c:foo.txt");
f.MoveTo(@"c:bar.txt");

//vs

System.IO.File.Move(@"c:foo.txt", @"c:bar.txt");
24
demandé sur Eric Anastas 2010-04-29 01:32:43

4 réponses

jetez un coup d'oeil à la section "Remarques" de cette page du MSDN http://msdn.microsoft.com/en-us/library/akth6b1k.aspx:

si vous allez réutiliser un objet plusieurs fois, envisagez d'utiliser la méthode d'instance de FileInfo au lieu des méthodes statiques correspondantes du le Fichier classe, parce qu'un contrôle de sécurité ne sera pas toujours nécessaire.

je pense que cette différence est plus significative entre le Fichier (Directory) et FileInfo (DirectoryInfo).

UPD: la même explication dans une question similaire https://stackoverflow.com/a/1324808/380123

22
répondu MiSHuTka 2018-08-01 08:09:29

Via Le Réflecteur RedGate:

Fichier.Déplacer()

public static void Move(string sourceFileName, string destFileName)
{
    if ((sourceFileName == null) || (destFileName == null))
    {
        throw new ArgumentNullException((sourceFileName == null) ? "sourceFileName" : "destFileName", Environment.GetResourceString("ArgumentNull_FileName"));
    }
    if ((sourceFileName.Length == 0) || (destFileName.Length == 0))
    {
        throw new ArgumentException(Environment.GetResourceString("Argument_EmptyFileName"), (sourceFileName.Length == 0) ? "sourceFileName" : "destFileName");
    }
    string fullPathInternal = Path.GetFullPathInternal(sourceFileName);
    new FileIOPermission(FileIOPermissionAccess.Write | FileIOPermissionAccess.Read, new string[] { fullPathInternal }, false, false).Demand();
    string dst = Path.GetFullPathInternal(destFileName);
    new FileIOPermission(FileIOPermissionAccess.Write, new string[] { dst }, false, false).Demand();
    if (!InternalExists(fullPathInternal))
    {
        __Error.WinIOError(2, fullPathInternal);
    }
    if (!Win32Native.MoveFile(fullPathInternal, dst))
    {
        __Error.WinIOError();
    }
}

et FileInfo.MoveTo ()

public void MoveTo(string destFileName)
{
    if (destFileName == null)
    {
        throw new ArgumentNullException("destFileName");
    }
    if (destFileName.Length == 0)
    {
        throw new ArgumentException(Environment.GetResourceString("Argument_EmptyFileName"), "destFileName");
    }
    new FileIOPermission(FileIOPermissionAccess.Write | FileIOPermissionAccess.Read, new string[] { base.FullPath }, false, false).Demand();
    string fullPathInternal = Path.GetFullPathInternal(destFileName);
    new FileIOPermission(FileIOPermissionAccess.Write, new string[] { fullPathInternal }, false, false).Demand();
    if (!Win32Native.MoveFile(base.FullPath, fullPathInternal))
    {
        __Error.WinIOError();
    }
    base.FullPath = fullPathInternal;
    base.OriginalPath = destFileName;
    this._name = Path.GetFileName(fullPathInternal);
    base._dataInitialised = -1;
}
13
répondu jcolebrand 2010-04-28 21:39:13

une différence importante est que FileInfo.MoveTo () mettra à jour le chemin filepath de L'objet FileInfo vers le chemin de destination. Ce n'est évidemment pas le cas du Fichier.Move () puisqu'il n'utilise les chaînes que comme entrée.

8
répondu Robert 2015-09-03 11:11:48
File.Move statique FileInfo.MoveTo ne l'est pas.

en dehors de cela ils exécutent approximativement le même code.

3
répondu Jens Granlund 2010-04-28 21:40:24