Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi ShFileOperation磁盘大小中止选项_Delphi_Shell_Abort - Fatal编程技术网

Delphi ShFileOperation磁盘大小中止选项

Delphi ShFileOperation磁盘大小中止选项,delphi,shell,abort,Delphi,Shell,Abort,我正在使用ShFileOperation将文件复制到SD卡,它几乎可以正常工作 我有一些大文件,5GB或更大。当SD卡为空时,这一切进展顺利。但是,当我更新SDCard上的文件时,ShFileOperation将检查剩余的磁盘大小,如果文件大于可用空间,它将显示“没有空间”对话框并中止 当文件将覆盖现有的文件时,问题就出现了,新文件可能只会增加3MB或4MB。在检查磁盘空间之前,SHFILE操作不会首先检查目标文件是否存在 我已经检查了MSDN网站上所有可用的标志,我能找到的唯一标志是FOF_N

我正在使用ShFileOperation将文件复制到SD卡,它几乎可以正常工作

我有一些大文件,5GB或更大。当SD卡为空时,这一切进展顺利。但是,当我更新SDCard上的文件时,ShFileOperation将检查剩余的磁盘大小,如果文件大于可用空间,它将显示“没有空间”对话框并中止

当文件将覆盖现有的文件时,问题就出现了,新文件可能只会增加3MB或4MB。在检查磁盘空间之前,SHFILE操作不会首先检查目标文件是否存在

我已经检查了MSDN网站上所有可用的标志,我能找到的唯一标志是FOF_NOERRORUI,但这对我来说有点太残忍和极权主义了。删除所有错误消息只是为了解决一个问题

有没有办法让ShFileOperation不进行磁盘空间检查,但在发生严重错误时仍然声明错误

谢谢

有没有办法让ShFileOperation不进行磁盘空间检查,但在发生严重错误时仍然声明错误


您可以使用
FOF_NOERRORUI
抑制错误用户界面。这正是你想要的。但是,您需要为任何错误提供UI,因为您要求系统不要这样做。该标志实质上意味着“让我负责报告错误。”

在这种情况下,我建议对每个文件使用
CopyFileEx()
,根据需要使用其进度回调来更新您自己的进度对话框。

如果您事先检查目标文件,以确定它是否为覆盖,您还可以删除目标,在这种情况下,shell的警告将是准确的。谢谢,我已经尝试过了,但它仍然不会将其复制到现有文件上。它隐藏了错误消息,但什么也不做。当前问题是现有文件为10.8GB,新文件为11GB,可用空间为8GB。事实上,有7.8GB的可用空间。谢谢雷米,我现在正在做类似的事情,但我喜欢使用ShellAPI,因为它为长拷贝提供了新的win7/8图形对话框。Progressbar看起来停滞不前,因为它有非常大的文件在呻吟10分钟。您必须将鼠标光标放在移动部件的末端,以验证它是否确实在移动。使用CopyFileEx()显示自己的状态对话框的一个好处是,您可以显示两个进度条—一个用于显示复制了多少文件,另一个用于显示复制了多少字节的当前文件。如果文件列表很大,第一个栏可能会缓慢增加,但第二个栏会快速显示实时活动。