0 0

读文件与写文件的问题.5

写完文件后,马上读文件为什么读不到文件?请大家帮助.

问题补充:关闭了StreamWriter,马上接着读写进去的文件,读一行是空"";

问题补充:关闭了StreamWriter,马上接着读写进去的文件,读一行是空"";

问题补充:写文件的时候,在finally里面sw.flush(),sw.close();写完之后马上读文件,怎么也读不到文件.MessageBox.show(sr.ReadLine())显示是空"";

问题补充:文件写进去了,读不到.

问题补充:窗体情况下用的IO.

问题补充:关闭资源全在finally里面进去,不管try{}里面语句是否有错,都会执行finally语句,所以写在finally里面.

问题补充:using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.IO;

namespace ADODataBase
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            SqlConnection con = null;
            SqlCommand cmd = null;
            SqlDataReader dr = null;
            string username=textBox1.Text;
            string password = textBox2.Text;
            string pathOne =@"c:\info\message.txt";
            StreamWriter sw = new StreamWriter(pathOne);
           
            try
            {
                con = new SqlConnection();
                con.ConnectionString = "server=localhost;user=sa;pwd=123456;database=usermanage";
                con.Open();     
                string sql = "select * from usertable where username='"+username+"' and password='"+password+"'";
                cmd = new SqlCommand(sql,con);              
                dr= cmd.ExecuteReader();
                sw.WriteLine(dr.FieldCount);                     //写入列的总数.
                if(dr.Read()){   
                    for (int i = 0; i<dr.FieldCount;i++)
                    {
                        sw.Write(dr.GetName(i)+":@");
                        if (i == 0)
                        {                          
                            sw.Write(dr.GetInt32(i).ToString());
                        }
                        else
                        {
                            sw.Write(dr.GetString(i));
                        }
                        sw.WriteLine();
                    }
                    Form2 form2 = new Form2();                   
                    form2.Show();                   
                }
                else
                {
                    MessageBox.Show("此查询没有结果集!!!");
                    MessageBox.Show("密码或帐号错误,请从新登入.");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
                MessageBox.Show("登入失败!!!");
            }
            finally
            {
                sw.Flush();
                sw.Close();                                                         dr.Close();
                con.Close();
            }
        }
    }
}

问题补充:using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Data.SqlClient;

namespace ADODataBase
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void Form2_Load(object sender, EventArgs e)
        {
            string field = null;
            string value = null;
            string columnCount = null;
            int i = 0;
            int j = 0;
            string pathTwo = @"c:\info\info.txt";
            string[] arrayName=null;
            string[] arrayValue=null;
           
            FileStream fs = new FileStream(pathTwo, FileMode.Open,FileAccess.Read,FileShare.ReadWrite);
            StreamReader sd = new StreamReader(fs,System.Text.Encoding.GetEncoding("UTF-8"));
            try
            {
                while (sd.Peek()>0)                          {                  
                    if (i == 0)
                    {
                        columnCount=sd.ReadLine();                                  //得到列的总数.
                        arrayName = new string[int.Parse(columnCount)];            //设定数组的大小.
                        arrayValue = new string[int.Parse(columnCount)];            //设定数组的大小.
                    }
                    else
                    {
                        field = sd.ReadLine().Trim();
                        string[] arr = field.Split(new char[] { '@' });            //写入的数据进行分割.
                        arrayName[j] = arr[0];                                     //把列名放进一个数组.
                        arrayValue[j] = arr[1];                                   //值放进一个数组.
                        j++;
                    }
                  
                    i++;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
                MessageBox.Show("读数据出现异常");
            }
            finally
            {              
                sd.Close();
                fs.Close();
            }
            for(int k=0;k<groupBox1.Controls.Count;k++)               //列名
            {
                Label lb=(Label)groupBox1.Controls[k];
                lb.Text=arrayName[k];
            }
            for(int l=0;l<groupBox2.Controls.Count;l++)             //值
            {
               TextBox tb=(TextBox)groupBox2.Controls[l];
                tb.Text=arrayValue[l];
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {

        }

        private void button4_Click(object sender, EventArgs e)
        {
            string id=textBox7.Text;
            string trueness = textBox8.Text;
            MessageBox.Show("id="+id);
            MessageBox.Show("truenessname="+trueness);
            SqlConnection con=null;
            SqlCommand cmd=null;
            SqlDataReader dr=null;
            try
            {
                con = new SqlConnection("server=localhost;user=sa;pwd=123456;database=usermanage");
                con.Open();
                cmd=new SqlCommand("select * from usertable where id="+int.Parse(id)+"and truenessname='"+trueness+"'",con);
                dr=cmd.ExecuteReader();
                //MessageBox.Show("dr.Read()="+dr.Read());
                if(dr.Read())
                {
                   
                }
                else
                {
                    MessageBox.Show("没有找到此查询条件的结果,请验证后在查询.");
                }
              
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
                MessageBox.Show("连接失败");
            }
            finally
            {
                dr.Close();
                con.Close();
               
            }
        }
    }
}

问题补充:程序还正在写.只是把读文件的路径换了,直接复制的内容到另一个文件.

问题补充:我是有意写在info.txt里面读的,因为在message.txt里面读不到程序,所以更改了一个路径,以便继续下面的内容,如果根据你这样理解的话,那在info.txt里面也是读不出来的.

问题补充:嗯,是这个问题,谢了.
2011年7月05日 19:13

6个答案 按时间排序 按投票排序

0 0

采纳的答案

我没明白你的意思。我想你也没明白我的意思。
我的意思是,你的目的是通过form1去把数据写入message.txt中然后从message.txt中读取吗?如果是的话应该把form2放到finally后执行,同时form2里面也是读取message.txt ,

如果两个是不同的两个文件,就不存在写入没法读取的问题,因为就算写入成功了,你也是无法从另一个文件读取这个文件的信息的。

2011年7月06日 09:54
0 0

你写的是c:\info\message.txt文件,读的时候读的是info.txt文件?这样当然会没有啊。
还有就是,你的form2实在try里面执行的。我不知道我理解的对不对,你使用form2去读取数据然后呈现数据吧?finally的函数实在try或者catch执行完以后才执行的。你在调用form2.show()的时候流并没有关闭。你的form2应该放在finally之后执行。具体的话你可以加一个标志变量,在try成功执行则置为true,然后在finally后面通过标志变量来判断时候要调用form2

2011年7月06日 09:26
0 0

……读写的代码放上来看一看

2011年7月06日 08:02
0 0

finally- -,貌似好像记得,finally是函数返回之前调用的吧,你在下面直接打开获取不到的话是正常的。蛋疼,不知道我说的对不对。你试试直接在try里面关闭然后重新打开读取试试

2011年7月05日 20:59
0 0

用记事本打开看文件是否有数据写入?Flush方法调用试一下。正常来说文件关闭之前会自己调用Flush方法把文件流写入文件的,查查肯定是漏了什么。

2011年7月05日 20:18
0 0

没有关闭吧?文件流如果不关闭的话内容是存在内存中的,如果不打算关闭文件的话要手动写入文件中。

2011年7月05日 19:44

相关推荐

    c++读写.ply文件

    例如,你可以用C++读取一个`.ply`文件,对模型进行处理(如减面、平滑),然后再写回结果,以优化模型的性能。或者,你可以将3D扫描的数据转换为`.ply`格式,以便与其他软件进行数据交换。 总的来说,C++读写`.ply`...

    采用无缓冲方式实现文件读写.docx

    这种方式可以提高文件读/写的效率,但需要注意文件的同步问题。 实验步骤 1. 首先,创建一个文件句柄,用于读取和写入文件。 2. 然后,使用 ReadFile 函数读取文件的内容,并将其存储在缓冲区中。 3. 接下来,使用...

    2023 C#读取.nc文件

    - **获取元数据**:读取文件的维度、变量和属性信息,这些信息在NetCDF文件中非常重要,因为它们定义了数据的结构。 - **读取数据**:根据变量名和维度,读取特定变量的数据。例如,`reader.GetVariableData(...

    C#读取.nc文件

    标题中的"C#读取.nc文件"指的是使用C#编程语言处理NetCDF(Network Common Data Form)格式的数据文件。NetCDF是一种自描述、可移植、多维数组数据格式,广泛用于科学计算领域,如气象学、海洋学、地球物理学等。在...

    C#进行dat文件读写操作

    如果文件内容是纯文本,可以使用与读取CSV或txt文件相同的方法。如果内容是二进制,可能需要使用`FileStream`和`BinaryReader`类: ```csharp using System.IO; // 打开二进制dat文件 using (FileStream fs = ...

    Qt多线程读写大型文本文件项目

    5.读、写文件需要显示处理进度; 6.增加一个列表,用于展示文本文件的类型、大小、行数等。 一、功能列表 1.显示文件路径选择框,仅展示 .txt类型文件可选; 2.读取文本文件,显示到桌面控件中; 3.读取的文件使用...

    实例70读写文件.rar_写文件_文件读写_读写文件

    1. 打开文件:与写文件类似,但需指定"r"(读取)或"rb"(二进制读取)模式。 2. 读取数据:`read()`方法读取整个文件内容,`readline()`方法读取一行,`readlines()`方法读取所有行并返回列表。对于大文件,建议...

    C#读取写.mat文件

    C#读写Matlab文件,支持+ Double array+ Single array+ Char array+Structure+ Cell array+ Sparse array+ Int8 array+ UInt8 array + Int16 array+ UInt16 array+ Int32 array+ UInt32 array+ Int64 array+UInt64 ...

    java读取本地.db文件实例

    在Java编程中,读取本地SQLite数据库(.db文件)是一项常见的任务,特别是在移动应用开发或者需要离线存储数据的场景下。SQLite是一种轻量级的、开源的关系型数据库,它不需要单独的服务器进程,可以直接在应用程序...

    data.txt文件

    - `readline()`: 按行读取文件。 - `readlines()`: 将文件按行读取为列表。 #### 3. 数据写入 向文件写入数据时,使用`write()`或`writelines()`方法。值得注意的是,在写入之前,应确保文件是以`w`或`a`模式打开的...

    BMP文件的读写C代码及文档.rar

    2. 读取头部:读取文件头和信息头,验证文件是否为有效的BMP文件。 3. 分析图像信息:从信息头中获取图像宽度、高度、位深度等信息。 4. 分配内存:根据图像大小动态分配内存来存储图像数据。 5. 读取像素数据:逐行...

    面试题:把a.txt、b.txt文件合并写到c.txt文件

    // 假设我们在读取文件时已将内容保存在一个字符串变量content中 writer.println(content); ``` 最后,不要忘记关闭所有的流以释放系统资源: ```java readerA.close(); readerB.close(); writer.close(); ``` ...

    用Java读取.shp文件的工程文件

    这个Java工程文件旨在提供一个解决方案,帮助开发者读取`.shp`文件,获取其中的几何对象坐标,并将这些坐标写入新的文件中。下面我们将深入探讨如何用Java处理`.shp`文件以及相关的技术要点。 首先,要读取`.shp`...

    读、写sgy格式的地震数据文件.rar

    本文将详细介绍如何使用MATLAB进行SGY和SEGY格式的地震数据读取与写入操作。 首先,SGY和SEGY格式都是用于存储地震记录的二进制文件格式。SEGY(Standard for the Exchange of Geophysical Data)是地震行业的国际...

    读写文件读取文件操作读取文件操作读取文件操作读取文件操作

    在读取文件过程中可能会遇到各种问题,如文件不存在、无权限、文件正在被其他进程使用等。因此,编写代码时应考虑异常处理,使用`try/except`语句捕获并处理可能出现的错误。 五、性能优化 对于大文件,一次性读取...

    java读取*.mdb文件数据

    总的来说,通过使用UCanAccess驱动,Java开发者可以方便地与Access数据库进行交互,包括分页读取数据。理解和掌握这个过程对于处理需要与Access数据库进行集成的项目至关重要。在实际开发中,可以根据具体需求进行...

    Labview 配置文件,XML文件读写.rar

    配置文件,XML文件读写.rar XML的简单易于在多数应用程序中读/写数据,XML是数据交换的公共语言,很多不同的应用软件都支持XML文件。 配置文件,是一种计算机文件,可以对程序配置初始参数;设置程序初始数据。

    matlab读取segy格式的文件.zip

    然后,我们可以使用`fread`函数按字节读取文件,根据解析出的信息将字节转换为适当的数值格式。考虑到SEGY文件可能包含多个道(trace),我们需要处理每一道的数据。 以下是一个基本的MATLAB代码示例,用于读取SEGY...

    java读取文件方法大全

    根据给定的文件信息,我们可以总结出一系列关于Java中读取文件的方法,这些方法涵盖了不同层次的数据读取,包括字节、字符以及行级别的读取。以下是对这些知识点的详细阐述: ### Java读取文件方法大全:读取File流...

    读取rinex文件.zip_rinex2.10_rinex2.10 rinex2_rinex文件_观测文件_读RINEX文件

    读取rinex2.10导航电文(.n)与观测文件(.o)

Global site tag (gtag.js) - Google Analytics