C#保存图片到网络共享文件夹后提示不是有效位图文件求助
问题原因及修复方案
- 首先排除上游字节流本身的问题:先将
imageByteArray写入本地磁盘测试是否能正常打开,如果本地打开也报错,说明字节流本身不完整或格式错误,需要排查上游图片转字节流的逻辑。 - 如果本地测试字节流正常,问题出在写入网络共享路径的逻辑上,常见的问题点和修改如下:
- 避免手动拼接路径出错,使用
Path.Combine处理路径拼接 - 无需额外套一层MemoryStream中转,直接将字节数组写入文件流即可,避免流指针位置异常问题
- 增加强制刷写逻辑,确保网络写入的内容完全落地到磁盘
- 避免手动拼接路径出错,使用
修改后的代码如下:
string sDir = @"\\Q1875G\Vehicle"; NetworkCredential NCredentials = new NetworkCredential("FOLDER_ACCESS_USER", "Welcome@2020"); using (new NetworkConnection(sDir, NCredentials)) { string dirPath = Path.Combine(sDir, "483"); if (!Directory.Exists(dirPath)) Directory.CreateDirectory(dirPath); string fileName = "add_274400.jpg"; string fullPath = Path.Combine(dirPath, fileName); byte[] byteArrayIn = imageByteArray; // 直接写入字节数组,无需MemoryStream中转 using (var fs = new FileStream(fullPath, FileMode.Create, FileAccess.Write)) { fs.Write(byteArrayIn, 0, byteArrayIn.Length); // 强制刷写缓存到磁盘,适配网络共享场景 fs.Flush(true); } }
- 如果修改后还是有问题,可额外排查以下两点:
- 网络共享文件夹的权限是否有完整的写入权限,是否存在配额限制导致文件写入被截断
- 检查图片文件的大小和
byteArrayIn.Length是否一致,如果文件大小小于字节数组长度,说明网络传输过程中数据被截断,可增加写入完成后的长度校验逻辑
内容的提问来源于stack exchange,提问作者M.G
相关产品推荐
相关产品推荐

