如何快速删除多个文件

Ale*_*sev 4 c# directory

我在 Windows Server 中有一个文件夹,其中包含子文件夹和 ?50000 个文件。当我单击鼠标右键并选择删除(或 shift+delete)时 - 所有文件将在 10-20 秒内删除。

当我使用代码删除文件时 – 1500-4000 秒。

删除大量文件- 不适合我。

我的代码:

string folderPath = @"C://myFolder";
DirectoryInfo folderInfo = new DirectoryInfo(folderPath);
folderInfo.Delete(true); // true - recursive, with sub-folders
Run Code Online (Sandbox Code Playgroud)

如何更快地删除文件?

SO *_*ood 7

删除文件的一种更快的方法是使用 Windows 函数而不是 .NET 函数。

您需要先导入函数:

[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool DeleteFile(string lpFileName);
Run Code Online (Sandbox Code Playgroud)

然后你可以这样做:

string[] files = Directory.EnumerateFiles(path, "*". SearchOption.AllDirectories);

foreach (string file in files)
{
    DeleteFile(file);
}
Run Code Online (Sandbox Code Playgroud)

一旦文件被删除,这是使用托管 API 最慢的部分,您可以调用Directory.DeleteFolder(path, true)删除空文件夹。

  • @AlexanderBrattsev 不要认为在同一个磁盘上进行并行 IO 操作是个好主意。 (2认同)