C# 如何从现有文件中删除特定行数并创建新文本文件
我有一个文本文件,它有n行,我从现有文件中提取了几行(假设10行)。现在我想从现有文件中删除这10行,并在删除这10行之后使用所有现有数据创建新文件C# 如何从现有文件中删除特定行数并创建新文本文件,c#,text-files,read-write,C#,Text Files,Read Write,我有一个文本文件,它有n行,我从现有文件中提取了几行(假设10行)。现在我想从现有文件中删除这10行,并在删除这10行之后使用所有现有数据创建新文件 private void ReWriteFile(string NewFileName) { List<string> linetoDelete = _errorLine; using (StreamReader reader = new StreamReader(_fileName))
private void ReWriteFile(string NewFileName)
{
List<string> linetoDelete = _errorLine;
using (StreamReader reader = new StreamReader(_fileName))
{
using (StreamWriter writer = new StreamWriter(NewFileName))
{
// reading the old file remove the error line and create new file
}
}
}
private void重写文件(字符串NewFileName)
{
列表行删除=\u错误行;
使用(StreamReader=新StreamReader(_文件名))
{
使用(StreamWriter=newstreamwriter(NewFileName))
{
//读取旧文件删除错误行并创建新文件
}
}
}
请帮我举个例子 private void重写文件(字符串NewFileName){
private void ReWriteFile(string NewFileName) {
List<String> _errorLine = new List<string>() {
"Error Line 1", "Error Line 2"
};
String _fileName = "InputFile.txt";
String _outputFile = NewFileName;
List<string> linetoDelete = _errorLine;
String[] sourceLines = File.ReadAllLines(_fileName);
if (sourceLines.Length > 0) {
using (StreamWriter writer = new StreamWriter(_outputFile)) {
foreach(String line in sourceLines) {
if (!_errorLine.Contains(line)) {
writer.WriteLine(line);
}
}
}
}
}
列表_errorLine=新列表(){
“错误行1”,“错误行2”
};
字符串_fileName=“InputFile.txt”;
字符串_outputFile=NewFileName;
列表行删除=\u错误行;
String[]sourceLines=File.ReadAllLines(\u文件名);
如果(sourceLines.Length>0){
使用(StreamWriter writer=newstreamwriter(_outputFile)){
foreach(源代码行中的字符串行){
如果(!\u errorLine.Contains(line)){
writer.WriteLine(行);
}
}
}
}
}
对文本文件的读写是编程的一个基本部分,您的问题缺乏任何证据表明您试图自己解决这个问题
几点要考虑。
1) 读取文本文件进行处理时,将批次加载到String
对象数组中。在您处理源文件时,源文件不会更改,因此不需要让一个读卡器保持打开状态并在文件上保留句柄
2) 从文件中删除内容是一种不好的方法,因为在处理文件时可能会更改文件。这将导致在枚举文件时出现问题(假设在循环中使用读取器)
3) 我的方法并不完美-如果\u errorLine
列表很长,并且源文件也很长,那么会有很多调用来检查\u errorLine
列表是否包含特定的字符串。有一种更快的方法可以做到这一点,但我没有时间做任何广泛的测试
4) 作为第3点的后续内容,此代码未经测试,可能需要进行少量调整才能正常工作
最后,在SO上发布问题时,显示您至少已尝试解决问题,这比给我们一个基本示例并要求我们为您完成工作要好
有关从文件读取/写入的信息,请参阅以下页面
我见过很多刚毕业的程序员,他们不能像这样编写基本的IO函数,这有点令人不安
试试这个:
private void ReWriteFile(string _newFileName)
{
List<string> linetoDelete = _errorLine;
using (StreamReader reader = new StreamReader(_fileName))
{
using (StreamWriter writer = new StreamWriter(_newFileName))
{
string line;
while ((line = reader.ReadLine()) != null)
{
if(!linetoDelete.Contains(line))
writer.WriteLine(line);
}
}
}
}
如果要删除多行:
List<int> numberOfDeleteLines = new List<int>() { 1, 2, 3 };
...
string line;
int index = 0;
while ((line = reader.ReadLine()) != null)
{
if (!numberOfDeleteLines.Contains(index++))
writer.WriteLine(line);
}
List numberOfDeleteLines=newlist(){1,2,3};
...
弦线;
int指数=0;
而((line=reader.ReadLine())!=null)
{
如果(!numberOfDeleteLines.Contains(index++))
writer.WriteLine(行);
}
我不明白。你的代码到底有什么问题?谢谢你的解释,我从来没有对读/写文件感兴趣,这让我的生活有些困难。这就是问题所在。当我开始编程时,它是在Atari ST上,然后是DOS的Basic。用低级语言读写文件是一个基础,每个程序员都应该理解,没有例外。在现代环境中,文件访问对于分析日志文件和处理配置文件至关重要,不知道如何正确地做这件事显示了知识上的差距,必须加以填补。这就好像大学只教授高水平的理论废话,却没有教授像HelloWorld
这样的基础知识。我们从HelloWorld开始模拟彩票结果。如果那时我没有12年的业余编程背景(以及2年的专业编程背景),我会遇到真正的问题。
List<int> numberOfDeleteLines = new List<int>() { 1, 2, 3 };
...
string line;
int index = 0;
while ((line = reader.ReadLine()) != null)
{
if (!numberOfDeleteLines.Contains(index++))
writer.WriteLine(line);
}