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#