自己做的一个winform小工具中,有一个listbox,我想在每次程序启动时从本地一个文件中读出数据,将其中的一列展示在listbox中,而且数据要保存在内存中,供之后的功能调用。查论坛说filestream方式读取文件比较好,而且可以每次只读一行,对于很大的文件也可以轻松应付,虽然我的文件不可能那么大,但是为了练习也采用了这种办法。filestream中的ReadLine()方法也可以得出文件的行数,以下是源代码:
具体的办法是通过循环将文件的每行都读出存入一个一维数组,再用一个for循环将这个一维数组的数据存入一个二维数组的一行,二维数组的列数由一维数组的长度取得,行数则随着ReadLine()的循环自增,最后listbox展示的是这个二维数组的第1列。
- StreamReader streamreader = new StreamReader(FileOperation.folderfile);
- string line;
- while ((line = streamreader.ReadLine()) != null)
- {
- string[] readrow = line.Split(new char[] { '\t' });
- int m = 1;
- int n = readrow.Length;
- string[,] fields = new string[m, n];
- for (int i = 0; i < n; i++)
- fields[i / n, i % n] = readrow[i];
- listBox_folders.Items.Add(fields[m-1, 0]);
- m++;
- }
补:
随后的操作过程中,需要多次对该数组进行增删改操作,发现数组的操作很麻烦,于是只好重新来过,将数组改为DataTable类型,DataTable获取行数列数,索引,增删改操作都相当便利,而且我也熟悉,代码如下:
最后是复制给一个全局变量供全局使用。
- StreamReader streamreader = new StreamReader(FileOperation.folderfile);
- string line;
- DataTable dt_folders = new DataTable();
- DataColumn name = new DataColumn("Name", Type.GetType("System.String"));
- DataColumn folder = new DataColumn("Folder", Type.GetType("System.String"));
- DataColumn username = new DataColumn("UserName", Type.GetType("System.String"));
- DataColumn password = new DataColumn("Password", Type.GetType("System.String"));
- DataColumn protocol = new DataColumn("Protocol", Type.GetType("System.String"));
- DataColumn port = new DataColumn("Port", Type.GetType("System.String"));
- dt_folders.Columns.Add(name);
- dt_folders.Columns.Add(folder);
- dt_folders.Columns.Add(username);
- dt_folders.Columns.Add(password);
- dt_folders.Columns.Add(protocol);
- dt_folders.Columns.Add(port);
- DataRow row;
- while ((line = streamreader.ReadLine()) != null)
- {
- row = dt_folders.NewRow();
- string[] readrow = line.Split(new char[] { '\t' });
- row["Name"] = readrow[0].ToString();
- row["Folder"] = readrow[1].ToString();
- row["UserName"] = readrow[2].ToString();
- row["Password"] = readrow[3].ToString();
- row["Protocol"] = readrow[4].ToString();
- row["Port"] = readrow[5].ToString();
- dt_folders.Rows.Add(row);
- listBox_folders.Items.Add(row["Name"]);
- }
- datatable_folders = dt_folders.Copy();
没有评论:
发表评论