我有一个文件夹路径是 D:\product\L
里面存储的图片文件名类似 97875354768900025063.jpg
目前一共存储了 2147296 ,大小一共 127g
程序昨天突然报错了,错误是 “GDI+ 中发生一般性错误”
我用的是 Image.Save() 方法往文件夹存图。
沙箱正常,我在L目录同级下建了一个 test 文件夹,往里面写图片就正常。
所以,我猜应该是文件夹里面图片数量太多了。
那么,windows 系统单文件夹上限数量是多少呢?
我有没有什么临时性的解决方案?
因为项目当初设计的不是很好,如果现在想改为新增一个子目录来保存的话,涉及的东西可能比较多,不好修改。有什么办法能继续往这个L文件夹存储图片吗?谢谢。
如果手工可以复制粘贴文件进去,那就不是图片数量限制的问题
我不敢手工去复制粘贴。那个文件夹一打开系统就没反映了,所以?
dudu大,给我个建议我该怎么搞。。。。代码我确定没问题,我直接在L同级目录新建一个目录,马上就可以保存图片。。。同一片代码的,绝对没有任何差异。
@LoveCoder: 用命令行操作
我测试了,cmd下 copy命令可以复制进去。但是我用代码 Image.save()就报错,但是我确定我换一个同根目录下的test目录就可以,代码不动就是修改一下路径。权限的话,我给予的是 everyone 的所有权限。
大哥,这下咋办?
要改代码真的太多地方了。
我想让他能保存就可以。增长不会特别快。
@LoveCoder: 建议提供相关代码
@dudu:
这是代码片段,我只要把保存路径写成 L 文件夹下,则会gdi+错误,只要是test文件夹下,就是正常保存。
他们的区别仅仅只是 L 文件夹下有两百多万图片,而test是我新建的,权限等情况一致,都是everyone可读写。图片均为新增保存,而不是覆盖保存
@dudu: 这是我的测试代码,为了方便测试我已经将程序的代码剥离出来了,确定以及肯定是和原程序代码一致,并且是复现了的。
只要我修改路径为 图片中的 test 文件夹就保存成功,然后book文件夹下有一个 L 文件夹就是我保存了两百多万图片的文件夹,只要改为 L 文件夹来保存则会报 GDI+ 错误。
@LoveCoder: 建议试试先保存到一个临时文件夹,然后从临时文件夹复制到目标文件夹
@dudu: dudu大,有什么建议吗。该怎么排查出这个问题,现在初步怀疑就是图片数量过多导致的,所以单个文件夹图片数量达到多少会爆发这种问题,咱们cnblogs有某个文件夹下存在大量图片的情况吗
@dudu: 如果没有什么好办法解决,我是打算采用这个办法了。。。
@LoveCoder: 你可以 throw ee
看一下具体是在哪个地方抛出异常的,我们的应用中没有这种情况
@dudu: 我知道是哪一行抛出,就是那个 imageL.Save() 那一行抛出的 GDI+ 中发生一般性错误
@LoveCoder: 可以看到调用堆栈
@dudu: 杜杜大,我又有一个神奇的发现,我另外一个项目,我们拿2个进程池来表示
另外一个项目却能保存成功,也就是我后台那里也有一个修改图片的,能存进去。。。。。代码基本上是差不多的。只不过我后台是接受一个 httppost file 然后save。
但是保存的目标文件夹就是同一个,我把那边代码复制到我出错的这个项目跑通了一样还是不能保存。。。。。
所以,如果说是因为文件夹数量太多,后台项目修改图片应该也修改不了才对
@dudu: 不对,我发现是新增往里面保存就不行,修改图片可以。。。
@LoveCoder: 加油,这个问题应该可以解决的
@dudu: dudu大,我测试了一下
xcopy 都没法用 ,cmd下运行xcopy 提示 文件创建错误 - 由于文件系统限制,因此请求的操作无法完成
我之前用cmd下的copy复制单张图成功了,我以为是可以的,然后就先把图片保存到一个临时文件夹了,但是刚刚临时文件夹蛮多图片了,我就开始拿xcopy给复制了,结果就出现这个错误了。。。。。
求解答
云服务器吗?
阿里云?
我前些时间也出这样的问题, 找他们工程师也没有解决, 后来就算了, 添加一个其它的云盘, 存另一地方
对,就是云服务器。。。。阿里云的。。。
难道是阿里云的锅啊?我就是阿里云服务器,我也在工单系统提问了,他们的答复用的是网上的答案,说什么文件锁定、权限、路径是否存在。。。。。
你添加一个其他的云盘,然后把数据都复制过去还是说相当于新建了一个文件夹?
我重新在 D:\product 文件夹下新建一个 Ltest 文件夹,就能继续保存。
兄dei,你的那个文件夹图片数量是多少?我看看数量是否差不多,如果差不多代表可能是个系统上限了,如果相差很多,感觉可能是磁盘这块的问题。。。。
我的那个文件夹,有两百多万张图片。
@LoveCoder:
数量也不少, 就是保存时就出错, 有其它服务器没问题, 就一个服务器上不管怎整都有问题, 我就添加另一块云盘, 就可以了
@风浪: 文件创建错误 - 由于文件系统限制,因此请求的操作无法完成
我用cmd下的xcopy命令复制文件进去提示这个,你会提示这个吗??
为什么都放在一个文件夹? 每天新建一个文件夹,以日期为名称,这样就没问题了,而且查找的时候还方便
先不要问为什么要这样做,我的问题是为什么会出现这个问题。
项目结构已经是这样了,如果改架构比较来得方便我已经去改了而不是来提问了。你觉得呢
@LoveCoder: 行,你牛逼,好吧
@jqw2009: 。。。。。。。。。为啥人家dudu大第一反映是想找解决方案而不是劝我改项目。
一个文件夹能有两百多万文件,代表这个项目是运行了蛮久的老项目了,要求的是稳,改结构并不是一个好的选择,只有没办法才会考虑这个解决办法。