我需要从文本文件中删除一条确切的行,但我不能在我的生活中锻炼如何去做这件事。
非常感谢任何建议或示例?
相关问题
答案 0 :(得分:39)
如果您要删除的行取决于该行的内容:
string line = null;
string line_to_delete = "the line i want to delete";
using (StreamReader reader = new StreamReader("C:\\input")) {
using (StreamWriter writer = new StreamWriter("C:\\output")) {
while ((line = reader.ReadLine()) != null) {
if (String.Compare(line, line_to_delete) == 0)
continue;
writer.WriteLine(line);
}
}
}
或者如果它基于行号:
string line = null;
int line_number = 0;
int line_to_delete = 12;
using (StreamReader reader = new StreamReader("C:\\input")) {
using (StreamWriter writer = new StreamWriter("C:\\output")) {
while ((line = reader.ReadLine()) != null) {
line_number++;
if (line_number == line_to_delete)
continue;
writer.WriteLine(line);
}
}
}
答案 1 :(得分:13)
执行此操作的最佳方法是以文本模式打开文件,使用ReadLine()读取每一行,然后使用WriteLine()将其写入新文件,跳过要删除的一行。
据我所知,没有通用的delete-a-line-from-file函数。
答案 2 :(得分:7)
如果文件不是很大,一种方法是将所有行加载到数组中:
string[] lines = File.ReadAllLines("filename.txt");
string[] newLines = RemoveUnnecessaryLine(lines);
File.WriteAllLines("filename.txt", newLines);
答案 3 :(得分:2)
您实际上可以使用C#generics来实现这一目标:
var file = new List<string>(System.IO.File.ReadAllLines("C:\\path"));
file.RemoveAt(12);
File.WriteAllLines("C:\\path", file.ToArray());
答案 4 :(得分:2)
没有火箭scien代码需要。希望这个简单的短代码help。
List linesList = File.ReadAllLines("myFile.txt").ToList();
linesList.RemoveAt(0);
File.WriteAllLines("myFile.txt"), linesList.ToArray());
或使用this
public void DeleteLinesFromFile(string strLineToDelete)
{
string strFilePath = "Provide the path of the text file";
string strSearchText = strLineToDelete;
string strOldText;
string n = "";
StreamReader sr = File.OpenText(strFilePath);
while ((strOldText = sr.ReadLine()) != null)
{
if (!strOldText.Contains(strSearchText))
{
n += strOldText + Environment.NewLine;
}
}
sr.Close();
File.WriteAllText(strFilePath, n);
}
答案 5 :(得分:1)
阅读并记住每一行
确定您要摆脱的那个 的
忘掉那个
将其余部分写回到顶部 文件
答案 6 :(得分:0)
你是在Unix操作系统上吗?
您可以使用“sed”流编辑器执行此操作。阅读“sed”的手册页
答案 7 :(得分:0)
什么? 使用文件打开,搜索位置然后使用null流擦除行。
得了吗?简单,流,没有吃内存的数组,速度快。
关于vb的这项工作..示例搜索行culture = id其中,culture是namevalue,id是value,我们想将其更改为culture = en
Fileopen(1, "text.ini")
dim line as string
dim currentpos as long
while true
line = lineinput(1)
dim namevalue() as string = split(line, "=")
if namevalue(0) = "line name value that i want to edit" then
currentpos = seek(1)
fileclose()
dim fs as filestream("test.ini", filemode.open)
dim sw as streamwriter(fs)
fs.seek(currentpos, seekorigin.begin)
sw.write(null)
sw.write(namevalue + "=" + newvalue)
sw.close()
fs.close()
exit while
end if
msgbox("org ternate jua bisa, no line found")
end while
这就是所有......使用#d
答案 8 :(得分:0)
这可以分三步完成:
// 1. Read the content of the file
string[] readText = File.ReadAllLines(path);
// 2. Empty the file
File.WriteAllText(path, String.Empty);
// 3. Fill up again, but without the deleted line
using (StreamWriter writer = new StreamWriter(path))
{
foreach (string s in readText)
{
if (!s.Equals(lineToBeRemoved))
{
writer.WriteLine(s);
}
}
}
答案 9 :(得分:0)
我关心文件的原始结束行字符(“ \ n”或“ \ r \ n”),并希望将其保留在输出文件中(而不用当前环境的字符覆盖它们)其他答案似乎可以解决)。因此,我编写了自己的方法来读取一行而不删除结束行字符,然后在我的DeleteLines
方法中使用了该行(我希望可以选择删除多行,因此要使用一组行号来删除)。
DeleteLines
被实现为FileInfo
扩展名,而ReadLineKeepNewLineChars
被实现为StreamReader
扩展名(但显然您不必那样做)。
public static class FileInfoExtensions
{
public static FileInfo DeleteLines(this FileInfo source, ICollection<int> lineNumbers, string targetFilePath)
{
var lineCount = 1;
using (var streamReader = new StreamReader(source.FullName))
{
using (var streamWriter = new StreamWriter(targetFilePath))
{
string line;
while ((line = streamReader.ReadLineKeepNewLineChars()) != null)
{
if (!lineNumbers.Contains(lineCount))
{
streamWriter.Write(line);
}
lineCount++;
}
}
}
return new FileInfo(targetFilePath);
}
}
public static class StreamReaderExtensions
{
private const char EndOfFile = '\uffff';
/// <summary>
/// Reads a line, similar to ReadLine method, but keeps any
/// new line characters (e.g. "\r\n" or "\n").
/// </summary>
public static string ReadLineKeepNewLineChars(this StreamReader source)
{
if (source == null)
throw new ArgumentNullException(nameof(source));
char ch = (char)source.Read();
if (ch == EndOfFile)
return null;
var sb = new StringBuilder();
while (ch != EndOfFile)
{
sb.Append(ch);
if (ch == '\n')
break;
ch = (char) source.Read();
}
return sb.ToString();
}
}