我正在开发一个winform应用程序,用于在SAN中的目录之间移动文件。该应用程序搜索SAN目录中超过200,000个文件(每个目录)的目录中的文件列表,然后将找到的文件移动到另一个目录。
例如,我有这条道路:
\ san \ xxx \ yyy \ zzz
我在\ zzz中执行搜索,然后将文件移动到\ yyy,但是当我移动文件时,另一个应用程序正在向xxx,yyy和zzz目录中插入更多文件。
我不想影响对使用这些目录的其他应用程序的访问或性能。
文件的完整性也是一个大问题,因为当应用程序将文件移动到\ yyy目录时,另一个应用程序会使用这些文件。
所有这些步骤应该并行运行。
我可以使用哪些方法来实现这一目标? 我该如何处理并发?
提前致谢。
答案 0 :(得分:0)
使用已发布的.net源,可以看到移动文件操作的工作原理Here。现在,如果您按照逻辑进行操作,则会调用KERNEL32
。此状态的MSDN documentation
要将此操作作为事务处理操作,请使用MoveFileTransacted函数。
根据我的说法,移动方法是移动文件的安全/好方法。
搜索大量文件总是需要时间。如果你需要提高这个操作的速度,我建议你不要试图这样做。例如,我已经看到为字母和日期生成缓存桶。使用某种缓存系统,您可以更快地搜索文件,例如通过向缓存桶询问以“a”开头的文件,例如“以这些文件开头的文件,或这些日期之间的文件”等。
答案 1 :(得分:0)
据推测,这些文件被某些东西使用。出于对话的目的,我们假设它们已在SQL数据库中编入索引。
TABLE: Files
File ID Filename
-------------- ----------------------------
1 \\a\b\aaaaa.bin
2 \\a\b\bbbbb.bin
要将它们移至\\a\c\
而不影响访问权限,您可以执行以下操作:
\\a\b\aaaa.bin
复制到\\a\c\aaaa.bin
\\a\c\aaaa.bin
\\a\b\aaaa.bin
的所有未结会话后,删除旧文件如果文件在同一卷上,您也可以使用硬链接而不是副本。