A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 猫咪不吃糖 中级黑马   /  2013-10-16 23:02  /  1836 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 猫咪不吃糖 于 2013-10-18 16:31 编辑

try里打开文件,finally想关掉,但是这个变量的作用域就只在try里。在try前面先定义好文件和输入输出就OK了。求讲解下try,finally的关系。还有就是,文件正确的打开姿势是怎样?

  1.             try
  2.             {
  3.                 //打开文件
  4.                 FileStream fSalary = new FileStream("salary.txt", FileMode.Open);
  5.                 FileStream fNewSalary = new FileStream("newsalary.txt", FileMode.Create);
  6.                 StreamReader srSalary = new StreamReader(fSalary);
  7.                 StreamWriter wrSalary = new StreamWriter(fNewSalary);
  8.                
  9.                 }
  10.             }
  11.             catch (Exception e)
  12.             {
  13.                 Console.WriteLine("未找到工资文件。");
  14.                 Console.WriteLine(e);
  15.                 Console.ReadKey();
  16.                 return;
  17.             }
  18.             finally
  19.             {
  20.                 //关闭文件和输入输出流
  21.                 wrSalary.Close(); //这里有问题,不存在。
  22.                 srSalary.Close();
  23.                 fSalary.Close();
  24.                 fNewSalary.Close();
  25.             }
复制代码

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

6 个回复

倒序浏览
本帖最后由 面朝大海,春暖 于 2013-10-17 08:29 编辑

1、要想在catch里使用变量必须定义成全局变量,即在try、catch、finaly的外面
2、在C#中,try和catch可以连用,try-catch- finally可以连用,这是众所周知的,但是try、catch、finally这三个关键字却不能单独使用,如果在程序中只想try而不去catch也是可以的,但是try的后面必须跟有finally。
try语句块里是尝试着执行代码,如果有错误就会跳到catch里,但是finaly不一样,它不管有没有错误都会执行。3、
  •       FileStream fSalary = new FileStream("salary.txt", FileMode.Open);
  •                 FileStream fNewSalary = new FileStream("newsalary.txt", FileMode.Create);
  •                 StreamReader srSalary = new StreamReader(fSalary);
  •                 StreamWriter wrSalary = new StreamWriter(fNewSalary);
filestream里的参数要写文件的绝对路径,而不是文件名,可以这样:string path="文件路径";然后再

FileStream fSalary = new FileStream(path, FileMode.Open);
streamreader读取的时候要加默认编码,如: StreamReader srSalary = new StreamReader(fSalary,Encoding.Default);
这还没完,srSalary.ReadToEnd();这样就可以读取了。

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

回复 使用道具 举报
关系:
try
{
要执行的代码,
}
catch (Exception e)
{
错误处理
}
finaly
{
无论出错或者没出错,都会执行的代码
}
作用域的话:其实就是那个全局变量和局部变量了,
回复 使用道具 举报
面朝大海,春暖 发表于 2013-10-17 07:49
1、要想在catch里使用变量必须定义成全局变量,即在try、catch、finaly的外面
2、在C#中,try和catch可以连 ...

catch和try不是一个作用域,感觉好不爽。。。。。
catch后好像除了打印没什么可干的:L
还有就是,处理错误后怎么返回继续执行,求个例子。

文件输入输出倒是没问题,能正常运行了。

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

回复 使用道具 举报
猫咪不吃糖 发表于 2013-10-17 14:52
catch和try不是一个作用域,感觉好不爽。。。。。
catch后好像除了打印没什么可干的
还有就是,处理错 ...

我晕!catch里只是报错,并不能自动改错,这根本说不通,何况连catch里的代码都是你自己写的。。你能预见到try里会出现什么错误,如果这样的话还要try、catch干嘛。。
回复 使用道具 举报
try catch  final 都不在一个作用域,
所以try里面有的final里面就没有。你可以定义全局变量来解决这个问题,这样try catch final都能实现它的作用。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马