输入与输出(I/O)是程序与用户交互的桥梁。C#提供了强大的I/O功能,通过控制台和文件操作,可以实现数据的输入、输出和持久化。本节将介绍如何使用控制台进行输入与输出操作,包括基本的控制台读写方法。此外,我们将探讨如何进行文件读写操作,并讨论如何处理运行时异常,以编写更健壮的程序。这些基础知识是构建实际应用程序的关键组成部分。
控制台输入与输出
控制台输入与输出是C#程序中最基本的I/O操作。通过控制台,用户可以输入数据,程序可以输出信息。
控制台输出
‘Console.WriteLine‘ 和 ‘Console.Write‘ 用于向控制台输出信息。方法如下:
public class Program
{
public static void Main(string[] args)
{
// 输出一行信息,并换行
Console.WriteLine("Hello, World!");
// 输出信息,但不换行
Console.Write("Enter your name: ");
}
}
控制台输入
‘Console.ReadLine‘ 用于从控制台读取一行输入,返回值是一个字符串。方法如下:
public class Program
{
public static void Main(string[] args)
{
Console.Write("Enter your name: ");
string name = Console.ReadLine();
Console.WriteLine("Hello, " + name + "!");
}
}
在这个示例中,程序提示用户输入名字,然后读取输入并输出个性化的问候语。
文件读写操作
C#提供了丰富的文件操作功能,可以读写文本文件和二进制文件。
读写文本文件
使用 ‘System.IO.File‘ 类中的静态方法,可以方便地读写文本文件。
写入文本文件
using System;
using System.IO;
public class Program
{
public static void Main(string[] args)
{
string path = "example.txt";
string content = "Hello, File!";
// 写入文本文件
File.WriteAllText(path, content);
Console.WriteLine("File written successfully.");
}
}
读取文本文件
using System;
using System.IO;
public class Program
{
public static void Main(string[] args)
{
string path = "example.txt";
// 读取文本文件
if (File.Exists(path))
{
string content = File.ReadAllText(path);
Console.WriteLine("File content: " + content);
}
else
{
Console.WriteLine("File not found.");
}
}
}
逐行读取和写入
using System;
using System.IO;
public class Program
{
public static void Main(string[] args)
{
string path = "lines.txt";
string[] lines = { "First line", "Second line", "Third line" };
// 写入文件的每一行
File.WriteAllLines(path, lines);
Console.WriteLine("File written successfully.");
// 读取文件的每一行
if (File.Exists(path))
{
string[] readLines = File.ReadAllLines(path);
foreach (string line in readLines)
{
Console.WriteLine(line);
}
}
else
{
Console.WriteLine("File not found.");
}
}
}
异常处理与错误处理
在C#中,异常处理通过 ‘try‘、‘catch‘ 和 ‘finally‘ 块来实现,用于捕获和处理运行时错误。
基本异常处理
using System;
public class Program
{
public static void Main(string[] args)
{
try
{
Console.Write("Enter a number: ");
int number = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("You entered: " + number);
}
catch (FormatException ex)
{
Console.WriteLine("Error: Invalid input. Please enter a valid number.");
}
}
}
在这个示例中,‘try‘ 块中的代码可能抛出 ‘FormatException‘,‘catch‘ 块用于捕获并处理该异常。
多个catch块
可以使用多个 ‘catch‘ 块来处理不同类型的异常。例如:
using System;
using System.IO;
public class Program
{
public static void Main(string[] args)
{
try
{
string path = "nonexistent.txt";
string content = File.ReadAllText(path);
Console.WriteLine("File content: " + content);
}
catch (FileNotFoundException ex)
{
Console.WriteLine("Error: File not found.");
}
catch (UnauthorizedAccessException ex)
{
Console.WriteLine("Error: Unauthorized access.");
}
catch (Exception ex)
{
Console.WriteLine("An unexpected error occurred: " + ex.Message);
}
}
}
finally块
‘finally‘ 块中的代码无论是否发生异常都会执行,常用于释放资源。例如:
using System;
using System.IO;
public class Program
{
public static void Main(string[] args)
{
StreamReader reader = null;
try
{
reader = new StreamReader("example.txt");
string content = reader.ReadToEnd();
Console.WriteLine("File content: " + content);
}
catch (FileNotFoundException ex)
{
Console.WriteLine("Error: File not found.");
}
finally
{
if (reader != null)
{
reader.Close();
Console.WriteLine("File reader closed.");
}
}
}
}
总结
掌握控制台输入与输出、文件读写操作以及异常处理是编写有效和可靠C#程序的基础。通过学习这些内容,您可以处理用户输入、存储和读取文件数据,并在遇到错误时进行适当的处理。在接下来的章节中,您将继续探索C#的高级特性和编程技巧,进一步提升您的编程能力。