C#使用FileStream如何CSV中循环读取每一行,找到并清空全部带有指定字符串的那一行数据
时间: 2024-02-12 15:06:45 浏览: 225
如果CSV文件中可能包含多个带有指定字符串的行数据,那么我们需要修改上面的代码,使用一个`List<string>`来记录所有包含指定字符串的行数据的行号,然后再循环清空这些行数据。
以下是一个示例代码,演示如何使用FileStream和StreamReader循环读取CSV文件,并清空所有包含指定字符串的行数据:
```csharp
using (FileStream fs = new FileStream("data.csv", FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
using (StreamReader sr = new StreamReader(fs))
{
List<int> lineNumbers = new List<int>(); // 记录所有包含指定字符串的行号
string line;
int lineNumber = 0;
while ((line = sr.ReadLine()) != null)
{
lineNumber++;
// 判断是否包含指定字符串
if (line.Contains("指定字符串"))
{
lineNumbers.Add(lineNumber); // 记录行号
}
}
// 清空所有包含指定字符串的行数据
foreach (int num in lineNumbers)
{
fs.Seek(0, SeekOrigin.Begin); // 退回到文件起始位置
for (int i = 0; i < num - 1; i++) // 逐行读取直到找到需要清空的行
{
sr.ReadLine();
}
fs.Seek(-sr.CurrentEncoding.GetByteCount(sr.ReadLine()) - 2, SeekOrigin.Current); // 退回到该行数据的起始位置
string emptyLine = new string(',', line.Length); // 构造与该行数据长度相等的空行
byte[] bytes = sr.CurrentEncoding.GetBytes(emptyLine + "\r\n"); // 将空行转化为字节数组
fs.Write(bytes, 0, bytes.Length); // 将空行写入文件
}
}
}
```
在上面的代码中,我们使用了一个`List<int>`来记录所有包含指定字符串的行号,然后在循环清空时,逐个读取需要清空的行数据,并将该行数据替换为与其长度相等的空行数据。
需要注意的是,在将空行数据写入文件时,需要将其转化为字节数组,并使用`FileStream.Write`方法将其写入文件。同时,由于CSV文件是以逗号分隔的,所以我们在构造空行数据时,需要使用`new string(',', line.Length)`来确保空行数据的长度与原行数据的长度相等。
阅读全文
相关推荐
















