C# 创建多个PDF时出现的问题

C# 创建多个PDF时出现的问题,c#,loops,C#,Loops,我成功地创建了一个pdf,但是如何设计文件名循环呢? 问题是我的文件的每个循环都会被覆盖 我试图向文件中添加变量,但无效: var filename = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + strGPNrVar + DateTime.Now + "Report.pdf"; 以下是迄今为止的代码: Document document = new Document(PageSize.A4); Pdf

我成功地创建了一个pdf,但是如何设计文件名循环呢? 问题是我的文件的每个循环都会被覆盖

我试图向文件中添加变量,但无效:

var filename = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) 
    + strGPNrVar + DateTime.Now + "Report.pdf";
以下是迄今为止的代码:

Document document = new Document(PageSize.A4);
PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(
Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "/Report.pdf", FileMode.Create));

PdfPTable table = new PdfPTable(5);
document.Opem();

foreach (var f in transactions)
{
      //MessageBox.Show("Das ist die Menge" + f.CurrencyAmount);

      table.AddCell(f.ID.ToString());
      table.AddCell(f.TransactionType);
      table.AddCell(f.UserName);
      table.AddCell(f.EuroAmount);
      table.AddCell(f.GPNummer);


      document.Add(table);

}

document.Close();

System.Diagnostics.Process.Start(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "/Report.pdf");
MessageBox.Show("Pdfs erfolgreich erstellt");
我需要为每个客户循环这个。文件名应该是GpNrvar和datetime。现在你说“它不工作”,但没有说明为什么它不工作。如果你告诉我们发生了什么,我们可以更好地帮助你解决问题。但是,我认为您的问题是日期的默认格式包含无效文件名字符列表中的字符

您的代码使用
DateTime。现在通过直接将其添加到字符串中来使用

Environment.GetFolderPath(Environment.SpecialFolder.Desktop) 
+ strGPNrVar+ DateTime.Now + "Report.pdf";
这等于说:

Environment.GetFolderPath(Environment.SpecialFolder.Desktop) 
+ strGPNrVar + DateTime.Now.ToString() + "Report.pdf";
请注意
ToString()
部分-a
DateTime
值需要转换为字符串,默认格式通常包括斜杠和冒号,这两种格式在文件名中都是不允许的。在您的情况下,(如果
strGPNrVar
为“123”),您将得到如下文件名(在美国的系统上):

您需要手动指定日期格式以清除无效字符。正如其他人指出的,这说明了第二个问题,您应该使用
Path.Combine
来组合目录路径和文件名-这将考虑在需要的地方添加斜杠:

var filename = 
    Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), 
  strGPNrVar + "_" + DateTime.Now.ToString("yyyy-MM-dd-hh.mm.ss")
  + $"_Report.pdf");

谢谢,你帮了我很多忙! 这是适用于我的代码:

var pdf1 =
            Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
            strGPNrVar + "_" + DateTime.Now.ToString("yyyy-MM-dd-hh.mm.ss")
            + $"_Report.pdf");
            using (FileStream fs = new FileStream(pdf1, FileMode.Create,
            FileAccess.Write, FileShare.None))
           {

            Document document = new Document(PageSize.A4);
            PdfWriter writer = PdfWriter.GetInstance(document, fs);

你的尝试有什么不起作用?您可能在桌面路径后缺少斜杠?如何知道您正在下载的客户?什么是
GpNrvar
?该代码适用于一个客户,但每次都会被覆盖。。。我需要为每个客户创建一个交易列表。gpNrVar将从1迭代到5000 Gp Nr var是transactionlist的过滤器。除了0列表之外的每个数字都应该在
Path.Combine
上得到一个transactionpdfRead。我怀疑他想要
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop),strGPNrVar…+$“{I}\u Report.pdf”)
问题不在于重叠,因为strGPNrVar将在每个循环中迭代。我不知道创建这个文件的语法。它说每次都找不到路径。因为它认为路径应该是例如Desktop/2130,所以我无法创建动态文件名谢谢@DourHighArch-完全没有找到!Cryptogear,查看编辑-这会为您修复它。
var pdf1 =
            Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
            strGPNrVar + "_" + DateTime.Now.ToString("yyyy-MM-dd-hh.mm.ss")
            + $"_Report.pdf");
            using (FileStream fs = new FileStream(pdf1, FileMode.Create,
            FileAccess.Write, FileShare.None))
           {

            Document document = new Document(PageSize.A4);
            PdfWriter writer = PdfWriter.GetInstance(document, fs);