问题现象:我们的软件执行在Windows server 2003系统上,软件是一个接受文件软件,将接受的文件存于一个目录下,当执行到一定的时候,大概目录下有10w个文件的时候,就弹出“无法创建目录或文件”对话框,这是是我们catch到的异常。
问题原因:
可能有两种:
一、我们是不是使用了Windows server 的磁盘限额功能,限制了每一个用户的所能使用磁盘的大小。在一个有非常多用户的系统上,系统必须限制每一个用户的磁盘使用空间,以免个别用户占用过多的磁盘空间影响系执行和其它用户的使用。限制用户的磁盘使用空间就是给用户分配磁盘限额(quota),用户仅仅能使用额定的磁盘使用空间,超过之后就不能再存储文件。
磁盘限额是系统管理员用来监控和限制用户或组对磁盘的使用的工具。磁盘限额能够从双方面限制:其一,限制用户或组能够拥有的inode数(文件数);其二,限制分配给用户或组的磁盘块的数目(以千字节为单位的磁盘空间)。另外,设置磁盘限额还涉及例如以下三个概念。
硬限制:超过此设定值后不能继续存储新的文件。
软限制:超过此设定值后仍旧能够继续存储新的文件,同一时候系统发出警告信息, 建议用户清理自己的文件,释放出很多其它的空间。
时限:超过软限制多长时间之内(默觉得7天)能够继续存储新的文件。
磁盘限额是以每一使用者,每一文件系统为基础的。假设使用者能够在超过一个以上的文件系统上建立文件,那么必须在每一文件系统上分别设定。
二、可能是因为单个目录以下的文件数量过多,超出了文件管理系统的管理数量。我们项目中,用来存储接受文件的磁盘格式是FAT32的,其特定目录下最大文件数量是65,534,而我们的文件数量超过了10w,已经非常不稳定了。关于各种磁盘格式对文件数量的支持请參考博客:
FAT,FAT32,NTFS单文件夹文件数量限制
解决的方法:
1.“我的电脑”->"属性"->"限额",查看是否超过了磁盘限额。假设没有限额标签,则说明是磁盘格式为FAT32的,须要转成NTFS格式的
2.假设是文件数量过多,则也须要将FAT32格式转为NTFS格式,
命令为:convert c:/FS:NTFS