有人可以告诉我们如何制作全球Streamwriter
?
我的代码:
try
{
// Try to create the StreamWriter
StreamWriter File1 = new StreamWriter(newPath);
}
catch (IOException)
{
/* Catch System.IO.IOException was unhandled
Message=The process cannot access the file 'C:\Users\Dilan V 8
Desktop\TextFile1.txt' because it is being used by another process.
*/
File1.Write(textBox1.Text);
File1.Close();
throw;
}
我收到的错误The name 'File1' does not exist in the current context
答案 0 :(得分:2)
通过在try / catch之外移动变量的声明,你可以使它存在于try和catch的范围(上下文)中。
然而,我不确定你要完成什么,因为在这种情况下,你唯一的方法是进入捕获,如果你没有尝试打开文件,在这种情况下你不能写入捕获
StreamWriter file1 = null; // declare outside try/catch
try
{
file1 = new StreamWriter(newPath);
}
catch (IOException)
{
if(file1 != null){
file1.Write(textBox1.Text);
file1.Close();
}
throw;
}
移动变量以便在try catch之前声明它不会使它成为全局变量,它只是使它存在于你所在的那个方法中的剩余代码的整个范围内。
如果你想在一个类中创建一个全局变量,你可以这样做
public class MyClass{
public string _ClassGlobalVariable;
public void MethodToWorkIn(){
// this method knows about _ClassGlobalVariable and can work with it
_ClassGlobalVariable = "a string";
}
}
答案 1 :(得分:1)
在C#中,事物在范围内声明,并且仅在该范围内可用
你在try范围内声明你的变量File1,虽然它的初始化很好(它可能抛出异常),你想要的是事先声明它,以便在外部范围内(try和catch都是这样两者都可以使用。
StreamWriter File1 = null;
try
{
// Try to create the StreamWriter
File1 = new StreamWriter(newPath);
}
catch (IOException)
{
/* Catch System.IO.IOException was unhandled
Message=The process cannot access the file 'C:\Users\Dilan V 8
*/ Desktop\TextFile1.txt' because it is being used by another process.
File1.Write(textBox1.Text);
File1.Close();
throw;
}
然而,这仍然是一种错误的方法,因为您在尝试中唯一要做的是实例化一个新的StreamWriter。如果你最终陷入了捕获,这意味着失败了,如果它失败了你就不应再触摸该对象,因为它没有正确构造(你不写它也不关闭它,你根本不能写它,它不起作用。)
基本上你在代码中所做的就是“尝试启动汽车引擎,如果失败了,无论如何都要开始点击加速器”。