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");
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
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;
}
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.
FileInfo.MoveTo
ne l'est pas.en dehors de cela ils exécutent approximativement le même code.