首页 新闻 会员 周边 捐助

openFileDialog控件把流反序列话,打开的openFileDialog1点击“打开”按钮后,对话框不会自动关闭的,?希望大家指点

0
悬赏园豆:30 [已解决问题] 解决于 2012-05-23 23:08

 

 问题1:打开的对话框,点击“打开”按钮后,不关闭,不知是代码错误,还是openFileDialog1的属性设置有问题导致,不能关闭对话框

 

 显示的内容竟然为空白

 问题2:student.dat文件无法显示在(listbox的)lblResult中

 

项目文件代码地址:http://dynamic.xlpan.com/file/192477228/d1f80fef-f74c-47a1-a287-90b403a4f311

或者是

http://d.1tpan.com/tp1021414053

黑夜猫头鹰的主页 黑夜猫头鹰 | 初学一级 | 园豆:3
提问于:2012-05-19 00:28
< >
分享
最佳答案
0

函數修改

   private void btnOpen_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {

                Stream stream = new System.IO.StreamReader(openFileDialog1.FileName).BaseStream;   //打开选中的文件
                txtFile.Text = openFileDialog1.FileName;     //返回选中的文件名
                BinaryFormatter bf = new BinaryFormatter();   //创建序列化对象
                StudentList students = (StudentList)bf.Deserialize(stream);  //把流反序列化
                int k = 0;
                while (students[k] != null)                     //逐个显示学生列表中的数据
                {
                    string s_no = students[k].student_no;
                    string name = students[k].name;
                    string depart = students[k].department;
                    string result = String.Format("{0}\t{1}\t{2}", s_no, name, depart);
                    lbResult.Items.Add(result);
                    k++;
                }

                stream.Close();
            }
        }

去掉 openFileDialog1_FileOk 函數

收获园豆:25
無限遐想 | 老鸟四级 |园豆:3740 | 2012-05-19 10:00

报异常...........

无法找到程序集“8-4, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”。

  StudentList students = (StudentList)bf.Deserialize(stream);  //把流反序列化

不知道是不是我改错地方。你的代码无效额

黑夜猫头鹰 | 园豆:3 (初学一级) | 2012-05-19 13:41

@黑夜猫头鹰: 你用同一個程序,重新寫一個文檔,然後再讀取。這個是你的文檔的問題,可能是。

無限遐想 | 园豆:3740 (老鸟四级) | 2012-05-19 16:55

@無限遐想: 不行呢,你能不能将你调试好的那个项目代码,发我试试,我看我这边机器看会不会报错。

要不我就将生成stuent.dat的文件的那个项目也发给你,你看看行不行

http://dynamic.xlpan.com/file/192477228/8c538d07-c4cb-4789-83ec-24689bb60ec2

黑夜猫头鹰 | 园豆:3 (初学一级) | 2012-05-19 18:12

@黑夜猫头鹰: en.其实,你打开的时候,用你的show方法中的代码。就可以了。

無限遐想 | 园豆:3740 (老鸟四级) | 2012-05-19 19:58

@無限遐想:改成这样吗

private void btnOpen_Click(object sender, EventArgs e)
{

if (openFileDialog1.ShowDialog() == DialogResult.OK)
{

txtFile.Text = openFileDialog1.FileName;  //返回选中的文件名
Stream stream = openFileDialog1.OpenFile(); //打开选中的文件
BinaryFormatter bf = new BinaryFormatter(); //创建序列化对象
StudentList students = (StudentList)bf.Deserialize(stream); //把流反序列化
int k = 0;
while(students[k] != null) //逐个显示学生数据
{
string s_no = students[k].student_no;
string name = students[k].name;
string depart = students[k].department;
string result = String.Format("{0}\t{1}\t{2}", s_no, name, depart);
lbResult.Items.Add(result);
k++;
}
stream.Close();

}
}

还是不行,一样的问题

  StudentList students = (StudentList)bf.Deserialize(stream); //把流反序列化

无法找到程序集“8-4, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”。

黑夜猫头鹰 | 园豆:3 (初学一级) | 2012-05-19 22:00

@黑夜猫头鹰: 你把2個程序 合併 發給我。

無限遐想 | 园豆:3740 (老鸟四级) | 2012-05-20 12:22

@無限遐想: 其实我点不解,在这句中[无法找到程序集“8-4, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”。]中的8-4是产生student.dat文件的namespace空间,但我只是复制了序列化类stuentlist和stuent的定义,放进了【namespace _8_4实例】空间啊。怎么就跟8-4空间有关系呢?我的这回的项目文件是【namespace _8_4实例】

地址:http://dynamic.xlpan.com/file/192477228/95517a04-7a90-468a-8bb4-d67ea29c2c74

或者:http://d.1tpan.com/tp1775176941

不好意思老麻烦你了,大哥

黑夜猫头鹰 | 园豆:3 (初学一级) | 2012-05-20 13:43

@黑夜猫头鹰: 和 把程序 合併了一下。都合併到 8-4产生student.dat文件 里了。怎麼傳給你呢

無限遐想 | 园豆:3740 (老鸟四级) | 2012-05-20 14:55

@無限遐想: http://files.cnblogs.com/Teco/8-4.rar

無限遐想 | 园豆:3740 (老鸟四级) | 2012-05-20 15:00

@無限遐想: 不行,各种奇怪

而且这种方法即使能打开也有个缺点,就是只能打开路径为d:\student.dat的文件,项目里的代码是这样

string file = @"d:\student.dat";
Stream stream = new FileStream(file, FileMode.Open, FileAccess.Read);
BinaryFormatter bf = new BinaryFormatter();
List = (StudnentList)bf.Deserialize(stream);

重点现在还报错...........是不是我搞错了。。。。。。。。。

黑夜猫头鹰 | 园豆:3 (初学一级) | 2012-05-20 19:03

@黑夜猫头鹰: 我傳給你的下載下來,就可以用了哦

無限遐想 | 园豆:3740 (老鸟四级) | 2012-05-20 20:34

@無限遐想: 下載下來,打開項目,點show

無限遐想 | 园豆:3740 (老鸟四级) | 2012-05-20 20:41

@無限遐想: 不行啊,我的报错程序,用的就是下载你的项目

    而且好像那个openFileDialog1控件没起作用 ,我发现经过你这样一改,感觉那界面好奇怪,一个看.dat格式文件查看器,变复杂了

黑夜猫头鹰 | 园豆:3 (初学一级) | 2012-05-20 20:44

@黑夜猫头鹰: hehe .不會吧。我這裡都調試通過了。

無限遐想 | 园豆:3740 (老鸟四级) | 2012-05-20 21:17

@無限遐想: 其实我想问下,你是不是当场写的student.dat文件,然后就当场读啊?如果是这样话,其实我原来【8-4】实例的功能就是读写student.dat格式文件的项目,只不过只能读取的文件只能是位于string file = @"d:\student.dat"路下。

      你编写的那个程序好像跟openFileDialog1控件没关系?然而我是读取一个不是当场写的.dat格式的文件,而且我的.dat格式的文件也不是D盘的路径,产生了问题了。

     其实我最想知道的怎么我原来的的文件,怎么会有问题的,我最近在学习序列化的知识?我看原来的代码也没语法错误的问题啊,怎么在这一句

 StudentList students = (StudentList)bf.Deserialize(stream); //把流反序列化

会产生问题:无法找到程序集“8-4, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”。

恳求你告诉我是什么原因,究竟我的知识体系存在哪些漏洞误区,导致我编写的代码不完整而产生问题,还是我对vs机制理解不透彻?

黑夜猫头鹰 | 园豆:3 (初学一级) | 2012-05-20 22:49

@黑夜猫头鹰: 你可以把這個文件拷貝到其他路徑也可以哦。然後點show的時候,選擇這個文件,同樣都可以打開哦。至於寫到什麽地方。你自己再改了。現在已經能打開任何 一個 用你的程序寫的文件了。我這裡測試沒有你的問題。

無限遐想 | 园豆:3740 (老鸟四级) | 2012-05-21 09:29

@無限遐想: 我这边测试的确有问题,你帮我查看一下原来个项目好不

http://dynamic.xlpan.com/file/192477228/e9659d18-04ac-4a7d-962f-fa00fb6761f5

或者http://d.1tpan.com/tp0990813273

 为什么会产生错误:

StudentList students = (StudentList)bf.Deserialize(stream); //把流反序列化

无法找到程序集“8-4, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”。

恳求你告诉我是什么原因,究竟我的知识体系存在哪些漏洞误区,导致我编写的代码不完整而产生问题,还是我对vs机制理解不透彻?

我希望你给我指个方向,我自己慢慢调试代码

黑夜猫头鹰 | 园豆:3 (初学一级) | 2012-05-21 14:28

@黑夜猫头鹰: 晚上 ,我給你開遠程 調試一下哦。

無限遐想 | 园豆:3740 (老鸟四级) | 2012-05-21 14:41

@無限遐想: 你能远程控制我吗?怎么弄啊  。我的是校园网,网速不给力,我怕你带不动我啊

    你能告诉我:

StudentList students = (StudentList)bf.Deserialize(stream); //把流反序列化

无法找到程序集“8-4, Version=1.0.0.0, Culture=neutral,PublicKeyToken=null”。

是什么问题吗,可能得自己调试了

黑夜猫头鹰 | 园豆:3 (初学一级) | 2012-05-21 22:17

@黑夜猫头鹰: 我 剛開始 讀取的 時候 ,也是這樣,你先寫一個,然後 再讀取 試一下。可能不是一個程序寫的問題吧。程序集 不一樣吧。

無限遐想 | 园豆:3740 (老鸟四级) | 2012-05-22 09:03

@無限遐想: 我又试了几遍,还是不行啊

StudentList students = (StudentList)bf.Deserialize(stream); //把流反序列化

无法找到程序集“8-4, Version=1.0.0.0, Culture=neutral,PublicKeyToken=null”。

这究竟是什么错误啊,它代表什么意思呢?

黑夜猫头鹰 | 园豆:3 (初学一级) | 2012-05-22 12:49

@黑夜猫头鹰: 剛拿到你的程序的時候,是有這個錯誤,這個是由於不同的命名空間引起的。

但是,我修改了以後,就不會了。

你操作的時候,要先生成一個,然後 再打開這個生成的。

無限遐想 | 园豆:3740 (老鸟四级) | 2012-05-22 17:02

@無限遐想: 我在csdn也发了个帖,有些人说【dll问题】,还有人说

因为序列化和反序列化需要使用同一个程序集的同一个可序列化类定义,因此,要么使用同一个程序集定义类并进行序列化和反序列化,要么必须引用定义可序列化类的程序集

你觉得他们说的对吗?但他们就是简略的说说,我不懂他们实现的方法

请问如何使用dll(我只看过,没用过,也不知在c#中如何编写dll文件,dll是一个类还是一个命名空间?)解决问题,你能用这里例子教教我不,应为我想学一下(曾经看过三层结构但那书只用一页纸简略说下,我至今也不懂),应用一个dll

我把书里最原始的代码发给你:

写student.dat文件的项目地址下载地址http://d.1tpan.com/tp1502912424

还有一个是读取编译文件的项目的地址:http://d.1tpan.com/tp0508508001

   两个不同的命名空间用一个dll连接,又是一个新知识,我的好好学习啊

        麻烦了,真的麻烦你了

黑夜猫头鹰 | 园豆:3 (初学一级) | 2012-05-22 21:50

@黑夜猫头鹰: 不客氣。你就把2個合到一起用就好了哦。

無限遐想 | 园豆:3740 (老鸟四级) | 2012-05-23 09:19

@無限遐想: 那就是传说的dl文件的应用方法吗,我现在自己也会合两个文件项目(就是复制所有代码,再写一个项目文件),但不会用dll的方法,难道传说的dll方法,就是前几天你放给我的那种将所有代码放在一个命名空间的方法啊,他们不是说什么引用空间,引用dll吗?感觉各种犀利啊?dll不是一个独立的程序吗?

   你能将应用dll的完整项目代码发给我不?

   我想学习dll的编程方法,你可不可将你的那个编写了dll的项目放给我,让我研究学习?编写dll应用(经过这么久对这道题的学习,结合一个具体的例子,我用它来学习dll应该比较容易入门),恳请你将那个有dll例子发我行不?

黑夜猫头鹰 | 园豆:3 (初学一级) | 2012-05-23 11:54

@黑夜猫头鹰: 我那天 發給你的 就可以哦。

無限遐想 | 园豆:3740 (老鸟四级) | 2012-05-23 13:14

@無限遐想: 那个我这边真的不行啊,

你能发个含有dll例子行不?我也想学习一下如何编写dll文件,

你就结合这个项目写个含有dll范例让学习学习好不?我不知如何编dll件,我也想学习三成结构

  麻烦你,小菜感激不尽

黑夜猫头鹰 | 园豆:3 (初学一级) | 2012-05-23 13:44

@黑夜猫头鹰: 沒有dll哦。就是一個工程哦。我加你qq

無限遐想 | 园豆:3740 (老鸟四级) | 2012-05-23 14:04

@無限遐想: 哈哈,我懂了,经过你几天的指导,我学会了。

            谢谢

黑夜猫头鹰 | 园豆:3 (初学一级) | 2012-05-23 23:07
其他回答(1)
0

你应该绑定了文件打开的检查事件处理,此时,你的那个函数返回了false。

收获园豆:5
无之无 | 园豆:5095 (大侠五级) | 2012-05-19 08:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册