打开NTFS备用数据流时,Windows错误ERROR_DISK_FULL(112)的原因是什么?

时间:2009-10-22 10:10:49

标签: winapi stream ntfs

我的应用程序将一些字节的数据写入备用数据流。这适用于除一台计算机之外的所有计算机(Windows Server 2003 SP2)。 相反,当我尝试创建备用数据流(在根目录上)时,CreateFile返回ERROR_DISK_FULL。我没有找到这个结果的原因,因为......

  • 该驱动器上有足够的空间。

  • 驱动器是NTFS格式的(由于GetVolumeInformation)。

  • 驱动器支持altenate数据 流(由于GetVolumeInformation)。

编辑:我可以提供一些有关的原因的更多信息: 我在测试系统上添加了许多流,这些流没有显示错误,并想知道是否可能发生错误。它没有。相反,在大约2000个带有长文件名的Streams之后,又发生了另一个错误并持续存在:1450(ERROR_NO_SYSTEM_RESOURCES)。

编辑:以下是其中一个使用过的文件名的示例:

char szStreamFileName[] = "C:\\:abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnoqrstuvwxyz012345";

编辑:我们的客户在此服务器上使用Avira的一些企业防病毒软件。也许这就是原因(备用数据流可能被恶意软件滥用)。

7 个答案:

答案 0 :(得分:2)

在MS打开支持服务单后,我知道有一个只读标志设置,只能设置(和重置)未记录的Windows功能。没有人知道是谁设置了这个标志以及为什么,但我给他们发了一张驱动器的图像(在我从我们的客户拿到机器之后),所以他们想出来了。我们的应用程序中只有一个解决方法(如果检测到此错误,我们会使用其他位置)。同时我们知道我们的一些客户有这个问题。

答案 1 :(得分:1)

是否有压缩/备用文件或备用数据流?

  

备份应用程序通常会在尝试备份压缩文件时收到ERROR_DISK_FULL错误,这会在驱动器上仍有几千兆字节的可用空间时造成相当大的混乱。复制压缩文件时也可能出现其他问题。本博客的目的是让读者更全面地了解压缩NTFS文件时会发生什么。

来自 Understanding NTFS Compression

答案 2 :(得分:0)

只是一个盲目的镜头,但权利设置是否正确?

答案 3 :(得分:0)

另一种可能性......

您是否检查过操作系统中当前打开文件的数量? 操作系统支持最大该报告后的保留文件句柄数ERROR_DISK_FULL或ERROR_NO_SYSTEM_RESOURCES。

第二种可能性...... 根目录受文件数量的限制。我记得在旧版本的OS中有512个文件。但是NTFS在root中支持无限数量的文件!

答案 4 :(得分:0)

您可能希望在尝试创建此文件时看到Sysinternal's Process Monitor实用程序捕获的内容 - 它显示I / O堆栈中涉及的各种API的返回代码,其中一个可能会给您一个线索为什么112正在归还给你。希望ProcMon的详细程度足够 - 如果没有,我想有其他更详细的I / O跟踪工具适用于Windows(但我不知道它们在我的头顶)

答案 5 :(得分:0)

您提供的文件名是

char szStreamFileName[] = "C:\\:abcdefghijklm...

开头
C:\\:

这是帖子上的拼写错误,还是在斜线后真的有冒号?我认为这是一个非法的文件名。

答案 6 :(得分:0)

如果您尝试将大于2GB的文件从另一个文件系统(NTFS)复制到FAT / FAT32(其限制为2GB),您可能会看到此错误。