streamreader用于读取文本文件,streamwriter用于写入文本文件,二者均基于stream类,支持文件流、内存流和网络流;2. 读取文本时可使用readline()逐行读取、readtoend()读取全部内容(慎用于大文件)或read()按字符读取;3. 写入文本时使用write()或writeline()方法,可指定是否追加到文件;4. 应显式指定编码(如utf-8、utf-16)以正确处理不同编码的文本文件;5. 处理大文件时应使用缓冲区分块读取或逐行处理,避免内存溢出;6. 与binaryreader/binarywriter不同,streamreader/streamwriter处理文本并自动管理编码,后者用于二进制数据读写;7. 可结合cryptostream实现加密解密,通过aes算法和密码派生密钥对文件内容进行安全保护,需妥善管理密钥和密码。

C# 中的
StreamReader
StreamWriter
解决方案:
StreamReader
StreamWriter
Stream
使用 StreamReader
创建 StreamReader
Stream
StreamReader
string filePath = "myFile.txt";
try
{
using (StreamReader reader = new StreamReader(filePath))
{
// 读取操作将在 using 块中进行
}
}
catch (Exception ex)
{
Console.WriteLine($"读取文件时发生错误:{ex.Message}");
}读取文本:
StreamReader
ReadLine()
null
ReadToEnd()
Read()
示例:
using (StreamReader reader = new StreamReader(filePath))
{
string? line;
while ((line = reader.ReadLine()) != null)
{
Console.WriteLine(line);
}
}处理编码: 默认情况下,
StreamReader
StreamReader
using (StreamReader reader = new StreamReader(filePath, Encoding.UTF8))
{
// ...
}使用 StreamWriter
创建 StreamWriter
StreamReader
Stream
StreamWriter
string filePath = "myFile.txt";
try
{
using (StreamWriter writer = new StreamWriter(filePath)) // 默认覆盖现有文件
{
// 写入操作将在 using 块中进行
}
}
catch (Exception ex)
{
Console.WriteLine($"写入文件时发生错误:{ex.Message}");
}
// 追加到文件
try
{
using (StreamWriter writer = new StreamWriter(filePath, true)) // true 表示追加
{
// 写入操作将在 using 块中进行
}
}
catch (Exception ex)
{
Console.WriteLine($"写入文件时发生错误:{ex.Message}");
}写入文本:
StreamWriter
Write()
WriteLine()
示例:
using (StreamWriter writer = new StreamWriter(filePath))
{
writer.WriteLine("Hello, world!");
writer.Write("This is a test.");
}处理编码: 与
StreamReader
StreamWriter
using (StreamWriter writer = new StreamWriter(filePath, false, Encoding.UTF8))
{
// ...
}自动刷新: 默认情况下,
StreamWriter
AutoFlush
using (StreamWriter writer = new StreamWriter(filePath))
{
writer.AutoFlush = true;
// ...
}最佳实践:
StreamReader
StreamWriter
using
ReadToEnd()
Read()
处理大型文本文件时,效率至关重要。
ReadToEnd()
// 使用缓冲区读取大文件
using (FileStream fileStream = new FileStream("largefile.txt", FileMode.Open, FileAccess.Read))
{
using (BufferedStream bufferedStream = new BufferedStream(fileStream))
{
using (StreamReader streamReader = new StreamReader(bufferedStream))
{
char[] buffer = new char[4096]; // 4KB 缓冲区
int bytesRead;
while ((bytesRead = streamReader.Read(buffer, 0, buffer.Length)) > 0)
{
// 处理 buffer 中的数据 (0 到 bytesRead)
string chunk = new string(buffer, 0, bytesRead);
Console.Write(chunk); // 示例:打印到控制台
}
}
}
}这种方法将文件分成更小的块,从而减少了内存消耗。 还可以考虑使用异步读取操作,以避免阻塞主线程。
文本文件可以使用不同的编码进行编码,例如 UTF-8、UTF-16、ASCII 等。 如果不指定正确的编码,
StreamReader
StreamWriter
可以使用
Encoding
using (StreamReader reader = new StreamReader("utf16file.txt", Encoding.Unicode))
{
string? line;
while ((line = reader.ReadLine()) != null)
{
Console.WriteLine(line);
}
}如果不知道文件的编码,可以尝试使用
Encoding.GetEncoding
StreamReader
StreamWriter
BinaryReader
BinaryWriter
StreamReader
StreamWriter
BinaryReader
BinaryWriter
StreamReader
StreamWriter
BinaryReader
BinaryWriter
如果需要读写文本数据,请使用
StreamReader
StreamWriter
BinaryReader
BinaryWriter
BinaryReader.ReadInt32()
StreamReader
// BinaryReader 示例
using (FileStream fileStream = new FileStream("binarydata.dat", FileMode.Open, FileAccess.Read))
{
using (BinaryReader binaryReader = new BinaryReader(fileStream))
{
int age = binaryReader.ReadInt32();
double salary = binaryReader.ReadDouble();
Console.WriteLine($"Age: {age}, Salary: {salary}");
}
}StreamReader
StreamWriter
虽然
StreamReader
StreamWriter
CryptoStream
以下是一个简单的加密和解密文件的示例:
using System.Security.Cryptography;
// 加密文件
public static void EncryptFile(string inputFile, string outputFile, string password)
{
byte[] salt = new byte[8];
RandomNumberGenerator rng = RandomNumberGenerator.Create();
rng.GetBytes(salt);
using (FileStream fsOutput = new FileStream(outputFile, FileMode.Create))
{
using (Aes aesAlg = Aes.Create())
{
Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(password, salt, 1000, HashAlgorithmName.SHA256);
aesAlg.Key = key.GetBytes(aesAlg.KeySize / 8);
aesAlg.IV = key.GetBytes(aesAlg.BlockSize / 8);
ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
using (CryptoStream csEncrypt = new CryptoStream(fsOutput, encryptor, CryptoStreamMode.Write))
{
using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
{
//Write salt to the beginning of the file.
fsOutput.Write(salt, 0, salt.Length);
//Write the rest of the file.
using (StreamReader sr = new StreamReader(inputFile))
{
swEncrypt.Write(sr.ReadToEnd());
}
}
}
}
}
}
// 解密文件
public static void DecryptFile(string inputFile, string outputFile, string password)
{
byte[] salt = new byte[8];
using (FileStream fsInput = new FileStream(inputFile, FileMode.Open))
{
fsInput.Read(salt, 0, salt.Length);
using (Aes aesAlg = Aes.Create())
{
Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(password, salt, 1000, HashAlgorithmName.SHA256);
aesAlg.Key = key.GetBytes(aesAlg.KeySize / 8);
aesAlg.IV = key.GetBytes(aesAlg.BlockSize / 8);
ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
using (CryptoStream csDecrypt = new CryptoStream(fsInput, decryptor, CryptoStreamMode.Read))
{
using (StreamReader srDecrypt = new StreamReader(csDecrypt))
{
using (StreamWriter sw = new StreamWriter(outputFile))
{
sw.Write(srDecrypt.ReadToEnd());
}
}
}
}
}
}请注意,这只是一个简单的示例,可能不适用于所有情况。 应该根据具体需求选择合适的加密算法和密钥管理策略。 此外,需要妥善保管密码,否则无法解密文件。
以上就是C#的StreamReader和StreamWriter如何读写文本?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号