【问题标题】:C# File.Open and Stream equivalentC# File.Open 和 Stream 等效项
【发布时间】:2009-05-15 19:59:40
【问题描述】:

此网络服务需要此 xml 文件:

request.FeedContent = File.Open("test.xml", FileMode.Open, FileAccess.Read);

我已经在流中拥有该文件,但此语句挂起:

stream.Position = 0;
request.FeedContent = stream;

流是标准的 .net MemoryStream

我要对流进行什么操作以使其与 File.Open 相同?

谢谢!!

检查一下(api 定义):

    /// <summary>
    /// Gets and sets the FeedContent property.
    /// </summary>
    //[XmlElementAttribute(ElementName = "FeedContent")]
    public Stream FeedContent
    {
        get { return this.feedContentField ; }
        set { this.feedContentField= value; }
    }

【问题讨论】:

  • 能否添加服务的签名?
  • 您的 MemoryStream 是否打开?内容是否与文件内容相同?
  • 我解决了内存流打开问题,我在内存流的使用类之外提交了ws

标签: c# file-io stream


【解决方案1】:

我怀疑网络服务真的需要一个流。这到底是怎么代表的呢?您确定它不只是期望内容为字节数组吗?

File.Open 只返回一个FileStream - 如果stream 已经是一个FileStream,那么两者之间没有区别。 可能它想要一个FileStream,而你刚刚得到一个Stream。如果是这种情况并且它确实不是来自文件,那么您可能必须将其写入文件并为此打开FileStream。然后向 webservice 开发者抱怨他们的 API 很奇怪。

编辑:如果它只期待Stream,你应该没问题。您说它挂起 - 您是否尝试过调试并查看它到底挂在哪里?它是否出于某种原因试图读取更多数据?

【讨论】:

  • 流是内存流——我需要 eqiv 文件流:网络服务是亚马逊商户 ws,第一条语句有效——
  • amazon mws 仍处于测试阶段,但你应该看到他们之前的 api 噩梦
【解决方案2】:

您确定您的信息流中的当前位置是正确的吗?

我从文件流移动到内存流时最常见的错误是在写入内存流后错过了它:

stream.Seek(0, SeekOrigin.Begin);

【讨论】:

  • 这是否与:stream.Position = 0;
【解决方案3】:

您是否尝试过在分配之前将文件内容放入内存流?也许该服务正在使用您的文件流不支持的某些流功能。

类似这样的:

var stream = new MemoryStream(File.ReadAllBytes(fileName));
request.FeedContent = stream;

编辑:

等等...我完全误解了你的问题。因此,您直接传递 FileStream 的版本有效,如果您提供具有相同内容的 MemoryStream 则无效?

现在我建议您将内存流的内容与文件流的内容进行精确比较。也许是不同的编码?

【讨论】:

  • ws以这种方式接受流,所以内容有问题
【解决方案4】:

File.Open 返回一个流。还有其他问题。

【讨论】:

    【解决方案5】:

    File.Open 返回一个打开并位于流开头的 FileStream。

    您发布的代码:

    request.FeedContent = stream;
    

    并不表示您分配给 FeedContent 的流的状态。例如。也许您没有位于文件的开头? (如果流支持查找,则使用 Stream.Seek,如果它是 FileStream 或 MemoryStream 则使用)。

    如果这没有帮助,请发布更多代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-25
      • 1970-01-01
      • 2011-05-24
      • 2012-08-28
      相关资源
      最近更新 更多