Самый эффективный способ переименовать изображение
Есть ли более эффективный способ переименования файла в Windows, кроме:
System.IO.File.Move(sourceFileName, destFileName);
У меня их миллионы, и использование вышеупомянутого займет почти неделю, чтобы бежать.
1 ответ
Решение
File.Move - это тонкая оболочка для Win32 API. Я сомневаюсь, что есть более быстрый способ прямой модификации необработанных данных на уровне блоков на диске. Я думаю, вам не повезло в поисках более быстрого выхода из управляемого кода.
File.Move декомпилированный источник:
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();
}
}