【问题标题】:PdfSharp does not change file system infoPdfSharp 不会更改文件系统信息
【发布时间】:2019-03-20 10:40:53
【问题描述】:

我正在编写一个程序来更改目录中所有文件的修改日期。

我可以明显地更改属性,但不能让 Windows 识别它。

private static void ChangeDateTypeOfFile(DateTime date, string filepath)
{
    int state = PdfReader.TestPdfFile(filepath);
    if (state != 0)
    {
        System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
        PdfDocument doc = PdfReader.Open(filepath);
        doc.Info.ModificationDate = date;
        doc.Save(filepath);
    }
    else
    {
        Console.WriteLine(state);
    }
}

当我在更改它之前和之后阅读该属性时,我可以看到差异并且它似乎有效。然而,在 Windows 文件资源管理器中,我看不到任何更改(例如,titleauthor 也看不到)。最后修改日期更改为我运行代码时的日期。
如何持续更改此信息?

编辑:
当我用记事本打开它时,我可以看到这一行:

/ModDate(D:20070129000000+01'00') //Set the date to 2007

为什么文件资源管理器不显示此信息?

【问题讨论】:

  • 我不知道 PDFSharp 但您是否尝试过 System.IO 调用:File.SetLastWriteTime()
  • 刚在google上找到的,更简单更干净。

标签: c# pdf explorer pdfsharp file-attributes


【解决方案1】:

为什么文件资源管理器不显示此信息?

因为您的代码正在设置 PDF 的 internal 修改日期,该日期作为元数据存储在该 PDF 中。这个日期故意与 Windows 的文件时间戳无关,因为这些时间戳可以很容易地被各种工具设置为任意值,而 PDF 修改日期只能由 PDF 编辑器工具设置。

【讨论】:

    【解决方案2】:

    感谢Antry的评论:

    private static void ChangeDate(DateTime date, string filepath)
    {
        File.SetLastWriteTime(filepath, date);
    }
    

    PdfSharp 对这项任务来说太过分了。

    【讨论】:

    • 您可能需要两者,因为我认为这不会更改 PDF 的内部修改日期,这可能会导致系统和文件之间的修改日期不一致。我对你的项目了解不多,所以这将是你的电话。
    • 由于您的函数是ChangeDateTypeOfFile(...),您可能需要过滤文件的扩展名并将任何修改委托给处理适当文件类型修改的其他方法;如果您要修改不同类型的文件。以便您处理任何内部或外部日期修改。
    猜你喜欢
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 2015-05-11
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 2011-04-07
    相关资源
    最近更新 更多