【问题标题】:Read the entire file into a byte array in WINFORMS将整个文件读入WINFORMS中的字节数组
【发布时间】:2011-10-21 20:48:43
【问题描述】:

我想读取使用文件对话框打开的文件的内容,然后将其保存在字节数组中以将其传递给 Web 服务

        Stream myStream;
        OpenFileDialog saveFileDialog1 = new OpenFileDialog();

        saveFileDialog1.Filter = "zip files (*.zip)|*.zip|All files (*.*)|*.*";
        saveFileDialog1.FilterIndex = 2;
        saveFileDialog1.RestoreDirectory = true;

        if (saveFileDialog1.ShowDialog() == DialogResult.OK)
        {
            if ((myStream = saveFileDialog1.OpenFile()) != null)
            {

                NSITESERVICE.UploadSoapClient obj = new NSITESERVICE.UploadSoapClient();

                byte[] filebytes =  //what should i pass it over here...

                obj.UploadFile("kamal", "p@ssword", filebytes);

                // Code to write the stream goes here.
                myStream.Close();
            }
        }

我不知道我错在哪里

感谢任何帮助。谢谢

【问题讨论】:

  • 我应该将什么传递给 byte[] 文件字节。

标签: c# stream


【解决方案1】:

您没有为 filebytes 变量分配任何内容,因此您实际上是在将 null 传递给服务。使用File.ReadAllBytes方法读取所有字节并将其传递给webservice。

【讨论】:

  • 是的,我正在传递 null。那是我的问题,我应该通过什么。请帮忙
【解决方案2】:

您实际上并没有从 myStream 中读取字节。

byte[] fileBytes = new byte[myStream.Length];
myStream.Read(fileBytes,0,mystream.Length);

obj.UploadFile(...)

【讨论】:

  • 目前假设整个文件将在一次调用中读取。这是一个危险的假设。
  • @KamalDeepSingh:您应该使用 File.ReadAllBytes,或者从流中重复读取并使用 Read 的返回值来找出实际读取了多少。跨度>
  • @JonSkeet 只是好奇,在什么情况下 OpenFileDialog 返回的流不支持全长读取?
  • @jlew:我不能肯定地说——但一般不应该假设流一次性返回所有数据。我通常允许的唯一例外是MemoryStreamOpenFileDialog 是否允许您从(例如)映射到资源管理器的 FTP 服务器获取文件?如果是这样,这将是一个合理的例子,说明它可能不会一次性返回所有数据。最好不要依赖它,IMO。
猜你喜欢
  • 2014-01-02
  • 1970-01-01
  • 1970-01-01
  • 2014-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多