【问题标题】:Strange error when opening Package for writing打开包进行写入时出现奇怪的错误
【发布时间】:2011-08-18 21:24:54
【问题描述】:

首先,我使用的是 .NET 4。

我正在尝试将一些文件写入包中,但在执行此操作时遇到了一些奇怪的事情:

using (var package = Package.Open(filename, FileMode.OpenOrCreate, FileAccess.Write))
{
    // do something with package
}

Package 指的是System.IO.Packaging.Package

奇怪的是 Package.Open 方法抛出了一个异常,上面写着:

当访问为 FileAccess.Read 时,无法使用 FileMode.Create、FileMode.CreateNew、FileMode.Truncate、FileMode.Append 获取流。

我在 Microsoft Connect 上发现了 2009 年的旧错误报告: http://connect.microsoft.com/VisualStudio/feedback/details/392318/argumentexception-text-is-wrong

但这并没有帮助。

那么,有人有想法吗?

【问题讨论】:

  • 好像你这里没有合适的权限..
  • @Akram 有趣的是,一个 0 字节的文件最终在 filename 创建。
  • 如果您使用 FileAccess.Read 是否有效?
  • @Akram 不,同样的错误。但我怀疑这会起作用,考虑到我正在尝试写入文件......
  • 我知道这听起来很傻。这次试试 FileAccess.Create ..

标签: c# .net package


【解决方案1】:

我想我找到了问题。

当我更改代码来执行此操作时:

using (var stream = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.Write))
{
    using (var package = Package.Open(stream))
    {
        // do something with package
    }
}

我收到了一条相当不错的错误消息:

无法打开包,因为 FileMode 或 FileAccess 值对流无效。

我认为这是“真正的”错误信息,并且有人在某处将其与那个无意义的错误信息混为一谈。

然后我为此更改了代码:

// no FileAccess parameter
using (var package = Package.Open(file, FileMode.OpenOrCreate))
{
    // do something with package
}

它不再崩溃,而且似乎工作正常。

【讨论】:

  • 这很奇怪。不过很好。
  • +1 去掉文件访问参数似乎也为我解决了这个问题。很高兴我找到了你的帖子!我已经准备好度过一个漫长的夜晚了……
猜你喜欢
  • 1970-01-01
  • 2016-09-02
  • 2020-05-28
  • 1970-01-01
  • 1970-01-01
  • 2021-07-21
  • 2012-07-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多