试图读写受保护的内存.这通常表明其他内存已损坏
本文关键字:内存 常表明 其他 已损坏 读写 受保护 | 更新日期: 2023-09-27 18:09:44
我正在做一个windows窗体项目,它创建了一个PDF文件。我想把文件保存到用户想要的地方。为此我使用了SaveFileDialog。当我点击表单上的"另存为PDF"按钮时,我得到了这个错误代码。
Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
如果我不使用SaveFileDialog(如果我给文件一个静态名称),不要得到错误。
按钮点击代码:
private void button2_Click(object sender, EventArgs e)
{
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.InitialDirectory = Convert.ToString(Environment.SpecialFolder.MyDocuments);
saveFileDialog1.Filter = "(*.pdf)|*.pdf|All Files (*.*)|*.*";
saveFileDialog1.FilterIndex = 1;
saveFileDialog1.ShowDialog();
if (saveFileDialog1.FileName != "")
{
iTextSharp.text.Document pdfDosya = new iTextSharp.text.Document(PageSize.A4, 20, 20, 10, 10);
PdfWriter.GetInstance(pdfDosya, new FileStream(saveFileDialog1.FileName, FileMode.Create));//TODO dosya ismi
pdfDosya.Open();
}
}
如何解决这个问题
问题可能出在这里:
您不能使用Convert.ToString(Environment.SpecialFolder.MyDocuments)
以字符串形式获取文件夹路径,它只是一个枚举。您需要使用Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
来获取路径作为enum值的字符串。
试试这个代码
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.InitialDirectory = Convert.ToString(Environment.SpecialFolder.MyDocuments);
saveFileDialog1.Filter = "(*.pdf)|*.pdf|All Files (*.*)|*.*";
saveFileDialog1.FilterIndex = 1;
if(saveFileDialog1.ShowDialog() == DialogResult.OK)
{
MemoryStream ms = new MemoryStream();
iTextSharp.text.Document document = new Document(PageSize.A4, 10.0F, 10.0F,100.0F,0.0F);
document.AddTitle("FileName.pdf");
PdfWriter writer = PdfWriter.GetInstance(document, ms);
document.Open();
}