当前位置:编程学习 > C#/ASP.NET >>

C# 流不可读的问题怎么解决 急急急

C# 捕捉到错误信息 “流不可读”

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Reflection;
using System.Data.SqlClient;
using System.Threading;
using System.Data;
using System.Net;
using System.Net.Sockets;
using 发送端;



namespace songshu
{
    class DatabaseOper
    {
        Exception ex = new Exception("null");
        public SendData operStream = new SendData();
        public RecordStatus dbrs = new RecordStatus();
        public BackRecord dbbr = new BackRecord();
        public Form1 formDboper;
        
        public string getEx()  //返回最新一次抛出错误
        {
            return ex.ToString();
        }

        public void dataOperation()
        {
            while (true)
            {
               try
               {
                   SqlConnection RecordTableconn = new SqlConnection(@"Data Source=(local)\SQLExpress;server =.\sqlexpress;Integrated Security=True;Database=RecordDataBase");//连接事件记录库
                   RecordTableconn.Open();//打开连接
                   string sql = "SELECT * FROM RecordTable WHERE RecordStatus = '" + dbrs.Ss + "'";//选择记录表中字段RecordStatus为Savesuccess的数据
                   SqlCommand cmd = new SqlCommand(sql, RecordTableconn);//建立cmd
                   SqlDataReader recordReader = cmd.ExecuteReader();//建立dataReader

                   if (recordReader.HasRows)//reader中有数据
                   {
                       while (recordReader.Read())//循环读取
                       {
                           
                          dbOperation(recordReader["FilePath"].ToString());//调用函数                       }

                       recordReader.Close();//关闭dataReader
                       RecordTableconn.Close();//关闭数据库连接

                       formDboper.listboxDboper.Items.Add("写库完成!");
                       formDboper.listboxDboper.TopIndex = formDboper.listboxDboper.Items.Count - 1;//顶端显示最后一行
                   }
                   else
                   {
                       Thread.Sleep(10000);
                   }

                }
                catch
                {
                      formDboper.listboxDboper.Items.Add("写库失败!");
                      formDboper.listboxDboper.TopIndex = formDboper.listboxDboper.Items.Count - 1;//顶端显示最后一行
                      Thread.Sleep(10000);
                }
            }
        }

        public void dbOperation(string path)
        {
            try
            {
                FileStream dbfs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write);//创建文件流,读取path路径下的数据

                formDboper.listboxDboper.Items.Add("读取文件"+ path +"!");
                formDboper.listboxDboper.TopIndex = formDboper.listboxDboper.Items.Count - 1;//顶端显示最后一行

这里跳到catch 提示流不可读
                IFormatter serializer = new BinaryFormatter();
                serializer.Binder = new UBinder();
                operStream = serializer.Deserialize(dbfs) as SendData;//反序列化

                formDboper.listboxDboper.Items.Add("文件反序列化成功!");
                formDboper.listboxDboper.TopIndex = formDboper.listboxDboper.Items.Count - 1;//顶端显示最后一行

                                   }
                    catch
                    {
                        formDboper.listboxDboper.Items.Add("写库操作成功事件记录失败!");
                        formDboper.listboxDboper.TopIndex = formDboper.listboxDboper.Items.Count - 1;//顶端显示最后一行
                        Thread.Sleep(10000);
                    }

                }
            }

            catch
            {
                //将事件记录到数据库中
                bool dbBool = true;
                while (dbBool)
                {
                    try
                    {
                        string sql = "UPDATE RecordTable (WriteTime,RecordStatus) values('" + DateTime.Now.ToString() + "','" + dbrs.Ws + "') WHERE FilePath = '" + path + "' ";
                        recordConnect(sql);
                        dbBool = false;

                        formDboper.listboxDboper.Items.Add("'" + path + "'文件写库失败!");
                        formDboper.listboxDboper.TopIndex = formDboper.listboxDboper.Items.Count - 1;//顶端显示最后一行

                        formDboper.listboxDboper.Items.Add("写库操作失败事件已记录!");
                        formDboper.listboxDboper.TopIndex = formDboper.listboxDboper.Items.Count - 1;//顶端显示最后一行
                    }
                    catch
                    {
                        formDboper.listboxDboper.Items.Add("写库操作失败事件记录失败!");
                        formDboper.listboxDboper.TopIndex = formDboper.listboxDboper.Items.Count - 1;//顶端显示最后一行
                        Thread.Sleep(10000);
                    }
                }
            }
        }

        //连接事件记录数据库函数,执行sql语句
        public void recordConnect(string sql)
        {
            SqlConnection RecordTableconn = new SqlConnection(@"Data Source=(local)\SQLExpress;server = .\sqlexpress;Integrated Security=True;Database=RecordDataBase");
            SqlCommand cmd = new SqlCommand(sql, RecordTableconn);
            RecordTableconn.Open();
            cmd.ExecuteNonQuery();
            RecordTableconn.Close();
        }
        
        public class UBinder : SerializationBinder
        {
            public override Type BindToType(string assemblyName, string typeName)
            {
                Assembly ass = Assembly.GetExecutingAssembly();
                return ass.GetType(typeName);
            }
        }

    }
}


调用函数后,反序列化时提示流不可读 C# 流不可读 --------------------编程问答-------------------- 1. 一般检查流打开是否正常
2. FileStream dbfs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write);换成读模式
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,