我的名为test.txt的文件包含
本文档分为大约5个逻辑部分,从特征和结构概述开始,然后是内置列和单元格类型的概述。接下来是使用数据的概述,然后是特定主要功能的概述。最后,“最佳实践”部分总结了本文档的主要部分。
现在我要删除文件的第二行。 如何使用c#?
提前致谢。 Naveenkumar
答案 0 :(得分:5)
List<string> lines = File.ReadAllLines(@"filename.txt").ToList();
if(lines.Count>lineNum){
lines.RemoveAt(lineNum);
}
File.WriteAllLines(@"filename.txt",lines.ToArray());
答案 1 :(得分:1)
您可以通过\n
分割文本,然后使用LINQ选择要保留的行并重新加入它们来实现此目的。
var lineNum=5;
var lines=File
.ReadAllText(@"src.txt")
.Split('\n');
var outTxt=String
.Join(
"\n",
lines
.Take(lineNum)
.Concat(lines.Skip(lineNum+1))
.ToArray()
);
答案 2 :(得分:1)
这是一种非常有效的方法。
FileInfo x = new FileInfo(@"path\to\original");
string xpath = x.FullName;
FileInfo y = new FileInfo(@"path\to\temporary\new\file");
using (var reader = x.OpenText())
using (var writer = y.AppendText())
{
// write 1st line
writer.WriteLine(reader.ReadLine());
reader.ReadLine(); // skip 2nd line
// write all remaining lines
while (!reader.EndOfStream)
{
writer.WriteLine(reader.ReadLine());
}
}
x.Delete();
y.MoveTo(xpath);
答案 3 :(得分:0)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace rem2ndline
{
class Program
{
static void Main(string[] args)
{
string inPath = @"c:\rem2ndline.txt";
string outPath = @"c:\rem2ndlineresult.txt";
StringBuilder builder = new StringBuilder();
using (FileStream fso = new FileStream(inPath, FileMode.Open))
{
using (StreamReader rdr = new StreamReader(fso))
{
int lineCount = 0;
bool canRead = true;
while (canRead)
{
var line = rdr.ReadLine();
lineCount++;
if (line == null)
{
canRead = false;
}
else
{
if (lineCount != 2)
{
builder.AppendLine(line);
}
}
}
}
}
using(FileStream fso2 = new FileStream(outPath, FileMode.OpenOrCreate))
{
using (StreamWriter strw = new StreamWriter(fso2))
{
strw.Write(builder.ToString());
}
}
}
}
}
答案 4 :(得分:0)
这就是我要做的。优点是您不必一次将文件存储在内存中,因此对于不同大小的文件(只要每个文件中包含的行具有相似的长度),内存要求应该类似。缺点是你无法管道回到同一个文件 - 你必须在之后使用删除和移动。
对于你的简单例子,扩展方法可能有点过分,但这些是我一次又一次依赖的两种扩展方法,以及ReadFile方法,所以我通常只需要在Main中编写代码( )。
class Program
{
static void Main()
{
var file = @"C:\myFile.txt";
var tempFile = Path.ChangeExtension(file, "tmp");
using (var writer = new StreamWriter(tempFile))
{
ReadFile(file)
.FilterI((i, line) => i != 1)
.ForEach(l => writer.WriteLine(l));
}
File.Delete(file);
File.Move(tempFile, file);
}
static IEnumerable<String> ReadFile(String file)
{
using (var reader = new StreamReader(file))
{
while (!reader.EndOfStream)
{
yield return reader.ReadLine();
}
}
}
}
static class IEnumerableExtensions
{
public static IEnumerable<T> FilterI<T>(
this IEnumerable<T> seq,
Func<Int32, T, Boolean> filter)
{
var index = 0;
foreach (var item in seq)
{
if (filter(index, item))
{
yield return item;
}
index++;
}
}
public static void ForEach<T>(
this IEnumerable<T> seq,
Action<T> action)
{
foreach (var item in seq)
{
action(item);
}
}
}