编写一个使用两种自定义方法的程序: 自定义方法1应该接受用户输入并将其保存到文本文件中。 自定义方法2应该打开包含用户输入数据的文本文件,并将其显示在屏幕上。
如果不允许用户将文件保存在目录中,则您的程序不会崩溃。
如果您的程序无法打开用户文件,则它应该不会崩溃。
我目前有
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine("Enter text to save:");
string textInput = Console.ReadLine();
using (StreamWriter writer = new StreamWriter("Final.txt"))
{
writer.WriteLine(textInput);
}
string line = "";
using (var sr = new StreamReader("Final.txt"))
{
while ((line = sr.ReadLine()) != null)
{
Console.WriteLine("The Saved text is:");
Console.WriteLine(line);
}
}
}
}
我认为这涵盖了前两个选项,但是我在识别其他两个选项时遇到了问题。
我对编码是完全陌生的,所以我对应该做什么完全不满意。任何提示将不胜感激。
关于
答案 0 :(得分:0)
首先,您不需要使用StreamWriter
,只需使用File.WriteAllText
就可以将文本写入文件,这解决了您似乎遇到的问题:文件未关闭正确地
第二,在显示的代码中,您没有处理应该处理的可能的错误:
不允许用户写入或读取指定的目录
无法打开文件。
如果不允许用户写入文件或从文件中读取文件,则会引发System.UnauthorizedAccessException
。如果无法打开文件,则会抛出System.IOException
。
所以我们要做的是通过用{p>包围对File.WriteAllText
的调用来处理这些异常。
try
{
File.WriteAllText(...);
}
catch(UnauthorizedAccessException)
{
...
}
catch(IOException)
{
...
}
我们也对File.ReadAllText
做同样的事情。
完成任务的代码:
private string fileName = "Final.txt";
public void CustomMethod1()
{
Console.WriteLine("Enter the text to save: ");
string textInput = Console.ReadLine();
try
{
File.WriteAllText(this.fileName, textInput);
}
catch (UnauthorizedAccessException)
{
Console.WriteLine($"You are not allowed to save files in the directory '{this.fileName}'.");
}
catch (IOException e)
{
Console.WriteLine($"The error '{e.Message}' occured while saving the file.");
}
}
public void CustomMethod2()
{
if (!File.Exists(this.fileName))
{
Console.WriteLine($"Cannot find the file '{this.fileName}'.");
}
try
{
Console.WriteLine("The saved text is: ");
Console.WriteLine(File.ReadAllText(this.fileName));
}
catch (UnauthorizedAccessException)
{
Console.WriteLine($"You are not allowed to read files from the directory '{this.fileName}'.");
}
catch (IOException e)
{
Console.WriteLine($"The error '{e.Message}' occured while opening the file.");
}
}
public static void Main(string[] args)
{
Program program = new Program();
program.CustomMethod1();
program.CustomMethod2();
}