gpt4 book ai didi

c# - 如何使用 C# 从包含大量其他文件或文件夹的文件夹中正确删除 .Net Core 中的文件

转载 作者:行者123 更新时间:2023-12-02 09:22:02 25 4
gpt4 key购买 nike

我正在使用 File.Delete(String) 循环删除文件在最简单的 .Net Core 控制台应用程序中:

1. foreach (var listing in listings)
2. File.Delete(listing.Path);

但是问题是应用程序随机卡在第 2 行,没有抛出异常。应用程序重新启动后,多个文件被成功删除,并且应用程序再次随机卡在另一个文件上。

有一些事项需要注意:

  • listing.Path 是磁盘上文件的绝对路径
  • listing.Path 看起来像 D:\Output\00000001\6b1c8e6c-7d83-481a-a7db-aac9024059c4.png
  • 列表数组的长度约为10个项目
  • 文件确实在每种情况下都存在
  • 存储:希捷 Exos 7E8 512E 8TB 7200rpm 256MB ST8000NM000A 3.5 英寸 SATA III 硬盘
  • 操作系统:Windows 10 64x
  • Output 文件夹的总大小为 210GB
  • Output 文件夹包含 137 000 个其他文件夹,总共包含 928 000 个文件(大约 5 - 10 个文件)每个文件夹)
  • 平均文件大小约为350KB

我怀疑该问题与文件数量有关。但是File.Delete应该是删除文件的最可靠方法,它只是挂起几个小时而没有任何响应。这迫使我终止应用程序的进程。 是否有更好或更有效的方法来删除文件?

更新:将所有文件移动到网络中安装了SSD的另一台Windows计算机并在那里执行应用程序后,它工作得非常好。所以它可能看起来像是硬件问题。因此,我将问题标题从如何使用 C# 正确删除 .Net Core 中的文件改写为 如何从包含大量文件的文件夹中正确删除 .Net Core 使用 C# 中的文件其他文件或文件夹

最佳答案

1)不要期望创建一个包含数十万个文件名的数组,然后循环遍历它们并快速删除它们

2) 文件系统,特别是当目录位于网络共享、映射驱动器或由其他应用程序使用时,速度会很慢并且会阻塞操作。例如,尽快向目录添加新文件的处理将与尽快从同一目录删除文件的处理发生冲突,甚至可能死锁。

3) 文件可能被其他进程锁定

尝试一些测试a) 需要多长时间才能获得所有要删除的文件的列表?b) 连续删除1000个文件需要多长时间?

我开发的一个队列系统有大量文件,多个进程创建文件,多个进程处理文件,然后删除文件。

我们有 3 个目录:Inbound、BeingProcessed 和 ForDeletion

每个新文件都放入 Inbound 目录中另一个进程会将文件从入站目录移动到 BeingProcessed 目录,打开并锁定文件,然后处理该文件并将文件移动到 ForDeletion 目录另一个进程将删除 ForDeletion 目录中的文件

关于c# - 如何使用 C# 从包含大量其他文件或文件夹的文件夹中正确删除 .Net Core 中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60647128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com