黑马程序员技术交流社区

标题: try和finally,变量的作用域,求解释 [打印本页]

作者: 猫咪不吃糖    时间: 2013-10-16 23:02
标题: try和finally,变量的作用域,求解释
本帖最后由 猫咪不吃糖 于 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.             }
复制代码

作者: 面朝大海,春暖    时间: 2013-10-17 07:49
本帖最后由 面朝大海,春暖 于 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里的参数要写文件的绝对路径,而不是文件名,可以这样:string path="文件路径";然后再

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

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

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

文件输入输出倒是没问题,能正常运行了。
作者: 面朝大海,春暖    时间: 2013-10-17 16:52
猫咪不吃糖 发表于 2013-10-17 14:52
catch和try不是一个作用域,感觉好不爽。。。。。
catch后好像除了打印没什么可干的
还有就是,处理错 ...

我晕!catch里只是报错,并不能自动改错,这根本说不通,何况连catch里的代码都是你自己写的。。你能预见到try里会出现什么错误,如果这样的话还要try、catch干嘛。。
作者: aihuahuaxx    时间: 2013-10-17 19:42
try catch  final 都不在一个作用域,
所以try里面有的final里面就没有。你可以定义全局变量来解决这个问题,这样try catch final都能实现它的作用。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2