【问题标题】:How Can I Check That A File Is A Valid XPS File With C#?如何使用 C# 检查文件是否为有效的 XPS 文件?
【发布时间】:2012-04-26 01:52:48
【问题描述】:

我有一个处理 XPS 文件的 WinForms 应用程序。如何使用 C# 检查用户在打开对话框中选择的文件是否是有效的 XPS 文件?

会有一些扩展名为 .XPS 的文件不是真正的 XPS 文件。

由于 XPS 文件确实是 PKZIP 格式,我可以检查 PKZIP 字节签名,但这会在 ZIP 存档上产生误报。

【问题讨论】:

标签: c# xps


【解决方案1】:

下面将区分 XPS 文件与其他 ZIP 存档和非 ZIP 文件。它不会确定文件是否是完全有效的 XPS - 为此您需要加载每个页面。

using System;
using System.IO;
using System.Windows.Xps.Packaging;

class Tester
{
    public static bool IsXps(string filename)
    {
        try
        {
            XpsDocument x = new XpsDocument(filename, FileAccess.Read);

            IXpsFixedDocumentSequenceReader fdsr = x.FixedDocumentSequenceReader;

            // Needed to actually try to find the FixedDocumentSequence
            Uri uri = fdsr.Uri;

            return true;
        }
        catch (Exception)
        {
        }

        return false;
    }
}

【讨论】:

  • 非常感谢。效果很好。从我的工作站检查网络共享上的 621 MB 测试文件花了大约 33 秒。在我的测试中没有给出任何误报。
【解决方案2】:

您可以检查文件的内容类型而不是文件扩展名。

【讨论】:

  • 你如何检查“内容类型”?
  • HttpPostedFile.ContentType 检查 PostedFile.ContentType.ToLower() = whaterver mime type 您正在寻找。我会检查扩展名和内容类型抱歉刚刚看到这是 winforms 而不是 web
  • 这是一个 WinForms 应用程序。没有要检查的 ContentType。没有上传文件。
  • 我找到了这篇文章,但我还没有测试,codeproject.com/Articles/6871/…
猜你喜欢
  • 2015-09-30
  • 1970-01-01
  • 2014-08-09
  • 2010-10-27
  • 2014-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多