用vs2010编写C#程序,将图片保存到一个文件夹中,下次循环覆盖保存,提示gdi+中发生一般性错误。。。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用vs2010编写C#程序,将图片保存到一个文件夹中,下次循环覆盖保存,提示gdi+中发生一般性错误。。。相关的知识,希望对你有一定的参考价值。

点击按钮即将图片保存到指定文件夹,名字为0.bmp,下次点击仍然保存为0.bmp,即覆盖保存,提示“gdi+中发生一般性错误”,哪位大神能帮帮忙,跪谢~~~

在开发.NET应用中,使用 System.Drawing.Image.Save 方法而导致“GDI+ 中发生一般性错误”的发生,通常有以下三种原因:
1. 相应的帐户没有写权限。
解决方法:赋予 NETWORK SERVICE 帐户以写权限。
2. 指定的物理路径不存在。
解决方法:
在调用 Save 方法之前,先判断目录是否存在,若不存在,则创建。
if (!Directory.Exists(dirpath))
Directory.CreateDirectory(dirpath);
3. 保存的文件已存在并因某种原因被锁定。
解决方法:
重启IIS,解除锁定。并在代码中使用 using 语句,确保释放 Image 对象所使用的所有资源。
我遇到的情况:
在先用openFileDialog打开图片文件,然后用saveFileDialog保存文件时就出现了 “GDI+中发生一般性错误”,我当时就想到是打开的文件还没有释放出来,于是用openFileDialog1.Dispose()来释放,可是没有成功。同样从一个MemorySream 实例打开一个Image后,立即关闭了这个流,结果在Image.Save时也会发生这种错误。我“摆渡”了很久都是遇到和我一样问题的人,CSDN上面的同志也没有给出一个实用的答案。最后终于还是在微软的网站上找到了答案:(以下是官方解决办法)
症状
Bitmap 对象或一个 图像 对象从一个文件, 构造时该文件仍保留锁定对于对象的生存期。 因此, 无法更改图像并将其保存回它产生相同的文件。

替代方法
• 创建非索引映像。
• 创建索引映像。
这两种情况下, 原始 位图 上调用 Bitmap.Dispose() 方法删除该文件上锁或删除要求, 流或内存保持活动。

创建非索引图像
即使原始映像被索引格式中该方法要求新图像位于每像素 (超过 8 位 -) -, 非索引像素格式。 此变通方法使用 Graphics.DrawImage() 方法来将映像复制到新 位图 对象:
1. 构造从流、 从内存, 或从文件原始 位图 。
2. 创建新 位图 的相同大小, 带有是超过 8 位 - - 像素 (BPP) 每像素格式。
3. 使用 Graphics.FromImage() 方法以获取有关二 位图 Graphics 对象。
4. 用于 Graphics.DrawImage() 绘制首 位图 到二 位图 。
5. 用于 Graphics.Dispose() 处置是 图形 。
6. 用于 Bitmap.Dispose() 是首 位图 处置。

创建索引映像
此解决办法在索引格式创建一个 Bitmap 对象:
1. 构造从流、 从内存, 或从文件原始 位图 。
2. 创建新 位图 具有相同的大小和像素格式作为首 位图 。
3. 使用 Bitmap.LockBits() 方法来锁定整个图像对于两 Bitmap 对象以其本机像素格式。
4. 使用 Marshal.Copy 函数或其他内存复制函数来从首 位图 复制到二 位图 图像位。
5. 使用 Bitmap.UnlockBits() 方法可以解锁两 Bitmap 对象。
6. 用于 Bitmap.Dispose() 是首 位图 处置。
参考技术A ewewew 参考技术B 没有权限吧。

将信息导出到 xlsm 文件,C# VS asp.net

【中文标题】将信息导出到 xlsm 文件,C# VS asp.net【英文标题】:Export information to an xlsm file, C# VS asp.net 【发布时间】:2021-09-23 17:41:51 【问题描述】:

有没有办法将信息导出到 xlsm 文件?我做的步骤是:

在一个按钮中,我输入一个输入来选择文件,我将文件上传到服务器 我寻找已经在代码中指定的工作表 我根据要导出的信息修改文件信息 命令在本地保存文件。

错误如下: “第 59 行位置 30 上的 'br' 开始标签与 'font' 的结束标签不匹配。第 60 行,位置 9。” 当指示要使用的工作表时

我分享我的代码:有什么建议吗?

public void ExportFile(string FileName, string UserID)
        
            FileInfo fi = new FileInfo(FileName);
            Master.MSGError = string.Empty;
            string SheetName = "test";
            using (MemoryStream file = new MemoryStream())
            
                try
                
                    using (ExcelPackage xlPackage = new ExcelPackage(fi))
                    
                        ExcelWorksheet worksheet;
                        worksheet = xlPackage.Workbook.Worksheets[SheetName]; //here is the error exception 
                        
                        worksheet.Cells[1, 1].Value = "TEST";
                        
                        //save file
                         xlPackage.SaveAs(file);
                        Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                        

                        Response.BinaryWrite(file.ToArray());
                        Response.Flush();
                        Response.End();
                    
                
                catch (Exception ex)
                
                    Master.fc.MSGError = ex.Message;
                
            
        

【问题讨论】:

epplus 版本?使用 epplus 应该可以工作,如果任务很简单,您可以使用 npoi 更改尝试。 XLSM 正确的 mime 是 application/vnd.ms-excel.sheet.macroEnabled.12 我已经用 epplus 和 closedxml 试过了 @Diego Bonfil,根据我的测试,我遇到了你提到的不同错误。我添加代码 ** ExcelPackage.LicenseContext = LicenseContext.NonCommercial;** 来解决问题。根据您的错误,您能否提供您的 xlsm 文件?我认为您的错误与您的文件有关。此外,我们应该使用 xlPackage.Save(); 来保存文件。 @Jack J Jun,我希望我可以共享文件,但它不属于我,我在使用 closedxml 时遇到了另一个错误,似乎有几个与文件内容有关的问题:***.com/questions/29970814/… 【参考方案1】:

目前我解决了我的问题,我认为细节在宏中,但我发现真正的错误是在做不同的测试时,似乎 epplus 和 closedxml 在读取 excel 中的某些信息时都有问题,我最终使用了 closedxml 和应用解决方案: OpenXml Excel: throw error in any word after mail address

很抱歉造成混乱

【讨论】:

很高兴听到您的问题已经解决,您可以点击“✔”将您的回复标记为答案。它也将帮助其他人解决类似的问题。

以上是关于用vs2010编写C#程序,将图片保存到一个文件夹中,下次循环覆盖保存,提示gdi+中发生一般性错误。。。的主要内容,如果未能解决你的问题,请参考以下文章

用c#编写一个程序读取一张bmp图片的数据并转化为灰度图保存到文件中

vs2010中使用C#编写与ArcGIS Engine相关程序时提示错误,错误信息如下

VS2012 C#设计程序界面时以下这种按钮怎么添加

VC6.0或VS2010对图片操作

C# vs2010如何实现在一个类(.cs文件)下面又有很多个.cs文件?

VS工具下C#编写的WinForm程序运行缓慢问题