关于txt读取的问题

fantasykakaxi 2015-06-07 04:59:49
多行数据 我想一行一行的读取,然后把一行再分成几块存放到数组中 添加或者更新

大神看我一行一行着读取 做的对不对 合理么 我自己运行一下午了 改了删删了该 总觉得不对
protected void button_Click(object sender, EventArgs e)
{
DirectoryInfo di = new DirectoryInfo(@"C:\Users\123\Desktop\project\ConsoleApplication2\ConsoleApplication2\bin\Debug");
foreach (var fi in di.GetFiles("*.txt", SearchOption.AllDirectories))
{

using (StreamReader sr = new StreamReader(fi.FullName, System.Text.Encoding.Default))
{
string line;
while ((line = sr.ReadLine()) != null)
{
string[] str = line.Split(':', '\n');
if (str[5].ToString() == "1")
{
if (str[1] == null)
{
//添加
}
else
{
//更新
}
...全文
165 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
於黾 2015-06-09
  • 打赏
  • 举报
回复
引用 12 楼 xiyanyun 的回复:
代码里面不要带有str[5],str[1]这种东西,很容易出问题的!
这个问题其实和如何读txt无关的 这是对数组操作需要注意的问题 在不确定数组元素个数的情况下,不要胡乱使用下标访问 每个地方都应该做越界判断
xiyanyun 2015-06-09
  • 打赏
  • 举报
回复
代码里面不要带有str[5],str[1]这种东西,很容易出问题的!
在河之洲 2015-06-08
  • 打赏
  • 举报
回复
引用 1 楼 lovelj2012 的回复:
有一些细节需要注意
DirectoryInfo di = new DirectoryInfo(@"C:\Users\123\Desktop\project\ConsoleApplication2\ConsoleApplication2\bin\Debug");
可以改成

DirectoryInfo di = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory);//程序启动路径
另外,txt最好单独放一个文件夹。
这位大神回答得很好啊
我叫小菜菜 2015-06-08
  • 打赏
  • 举报
回复
引用 2 楼 caozhy 的回复:
不需要,直接用 string[] lines = File.ReadAllLines("文件.txt"); 就可以读取了
正解。 File.ReadAllLine+foreach+split,简洁得不能再简洁了~~~ 写的也差不多,用了C#,就用File封装的函数吧。
遥望那些年 2015-06-08
  • 打赏
  • 举报
回复
为了程序安全性考虑,循环内部应先判断str的长度是否大于5,否则str[5]会报错。 同时你已经声明了string类型的数组了,就没必要再str[5].ToString()了,直接str[5]就可以了。
於黾 2015-06-08
  • 打赏
  • 举报
回复

string[] lines = File.ReadAllLines("文件.txt");
lines.Length不就是行数了
fantasykakaxi 2015-06-08
  • 打赏
  • 举报
回复
引用 9 楼 Z65443344 的回复:
你只要都读出来,放到string或List<string>里 剩下如何循环,如何判断,都跟txt本身没啥关系 既然不能保证文件里的数据所有行的列数都一致,那么必然是需要判断一下,以免索引溢出程序崩溃
只能判断列数 行数怎么判断 每个txt的数据不同 相应的行数也不同 但是列数很好判断 就是数据库表的行数
於黾 2015-06-08
  • 打赏
  • 举报
回复
你只要都读出来,放到string或List<string>里 剩下如何循环,如何判断,都跟txt本身没啥关系 既然不能保证文件里的数据所有行的列数都一致,那么必然是需要判断一下,以免索引溢出程序崩溃
fantasykakaxi 2015-06-08
  • 打赏
  • 举报
回复
引用 2 楼 caozhy 的回复:
不需要,直接用 string[] lines = File.ReadAllLines("文件.txt"); 就可以读取了
那我应该怎么改啊 从foreach就要改么
fantasykakaxi 2015-06-08
  • 打赏
  • 举报
回复
引用 1 楼 lovelj2012 的回复:
你测试下来,功能实现了么?单独就你描述的这个功能,代码看起来是满足需要的。 有一些细节需要注意
DirectoryInfo di = new DirectoryInfo(@"C:\Users\123\Desktop\project\ConsoleApplication2\ConsoleApplication2\bin\Debug");
可以改成

DirectoryInfo di = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory);//程序启动路径
另外,txt最好单独放一个文件夹。 str数组长度是否大于等于6,这个没判断,可能出现str[5]超出索引异常等等
好的 一定注意 我的str数组起始是9个长度 是不是需要判断一下
fantasykakaxi 2015-06-08
  • 打赏
  • 举报
回复
引用 2 楼 caozhy 的回复:
不需要,直接用 string[] lines = File.ReadAllLines("文件.txt"); 就可以读取了
多个txt也能读取么?
threenewbee 2015-06-07
  • 打赏
  • 举报
回复
不需要,直接用 string[] lines = File.ReadAllLines("文件.txt"); 就可以读取了
江南小鱼 2015-06-07
  • 打赏
  • 举报
回复
你测试下来,功能实现了么?单独就你描述的这个功能,代码看起来是满足需要的。 有一些细节需要注意
DirectoryInfo di = new DirectoryInfo(@"C:\Users\123\Desktop\project\ConsoleApplication2\ConsoleApplication2\bin\Debug");
可以改成

DirectoryInfo di = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory);//程序启动路径
另外,txt最好单独放一个文件夹。 str数组长度是否大于等于6,这个没判断,可能出现str[5]超出索引异常等等

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧