private void button4_Click(object sender, RoutedEventArgs e)
        {
            if (openFile.ShowDialog() == true)
            {               
                openFile.File.OpenRead();            }
            if (openFile.File != null)
            {
                filname = "123.txt";
                WebClient webclient = new WebClient();                Uri uri = new Uri("http://192.1.2.3:80/ReaderClientTestPage.html?filename+" + filname, UriKind.Absolute);
                webclient.OpenWriteCompleted += new OpenWriteCompletedEventHandler(webclient_OpenWriteCompleted);
                webclient.OpenWriteAsync(uri, "POST", openFile.File.OpenRead());
            }
            else
            {
                // MessageBox.Show("请先选择文件!");
            }
        }
        void webclient_OpenWriteCompleted(object sender,OpenWriteCompletedEventArgs e)
        {
            Stream inputStream = e.UserState as Stream;
            Stream outputStream = e.Result;
            byte[] buffer = new byte[1024];
            int bytesRead = 0;          
            bytesRead = inputStream.Read(buffer, 0, 2); 
            bytesRead = inputStream.Read(buffer, 0, 2);
            bytesRead = inputStream.Read(buffer, 0, 2);
            bytesRead = inputStream.Read(buffer, 0, 2);
}在按钮里,打开文件,,然后触发事件---webclient_OpenWriteCompleted()
在这里做文件读操作            bytesRead = inputStream.Read(buffer, 0, 2);   一次读文件中2个字节(测试写固定内容:ABCDEFGH)
   共四句
   第一次读到了 AB
   第二次:CD
  第三次:EF
  第四次:GH
   只要文件流不关闭,每次都会从上次结束的地方,作为新一次读的开始,  但现在,想判断文件的结束,,怎么弄呢?
  像C 里的
   if(!feof(fptr))
   这样的
    就是把   bytesRead = inputStream.Read(buffer, 0, 2); 整成一句,,在一个判断里,只要文件没有读完,就继续读
每次读到长度相同谢谢  

解决方案 »

  1.   

    var buffer = new Byte[1024];
    var offset = 0;
    var len = 0;
    using (var fs = File.OpenWrite(filename))
    {
        while ((len = stream.Read(buffer, 0, buffer.Length)) > 0)
        {
            fs.Write(buffer, 0, len);
            offset += len;
        }
    }
    只要 Read 返回的 length == 0 就说明读完了。
      

  2.   

    while((bytesRead = inputStream.Read(buffer, 0, 2))>=0)
    {
      //...
    }