WriteAllText 方法 returns 最后一行,而不是文件的整行
WriteAllText method returns the last row, instead of the entire rows of the file
我有一个代码:
- 读取文本文件,
- 用“;”替换所有“空格”,
- 删除重复的字符“;”
- 并保存包含所有更改的新文件。
但是它不会写入文件中的所有行,而是只写入最后一行。
static void Main(string[] args)
{
RegexOptions options = RegexOptions.None;
Regex regex = new Regex("[ ]{2,}", options);
string FilePath = @"C:\Users\User\Desktop\download1.txt";
string OutputhFilePath = @"C:\Users\User\Desktop\download2.txt";
List<string> lines = new List<string>();
lines = File.ReadAllLines(FilePath).ToList();
foreach (string line in lines)
{
string line1 = line.Replace(' ', ';');
line1 = regex.Replace(line, ";");
Console.WriteLine(line1);
File.WriteAllText(OutputhFilePath, line1);
}
Console.ReadLine();
}
有人可以帮我解决这些问题吗?提前致谢!
你需要 File.AppendAllText()
.
您正在用新行覆盖之前的每一行,这就是为什么您只看到最后输入行的原因。
Creates a new file, write the contents to the file, and then closes
the file. If the target file already exists, it is overwritten.
所以你在读取的每一行中覆盖文件......你可以使用StringBuilder来做到这一点:
static void Main(string[] args)
{
RegexOptions options = RegexOptions.None;
Regex regex = new Regex("[ ]{2,}", options);
string FilePath = @"C:\Users\User\Desktop\download1.txt";
string OutputhFilePath = @"C:\Users\User\Desktop\download2.txt";
List<string> lines = new List<string>();
lines = File.ReadAllLines(FilePath).ToList();
var sb = new StringBuilder();
foreach (string line in lines)
{
string line1 = line.Replace(' ', ';');
line1 = regex.Replace(line, ";");
Console.WriteLine(line1);
sb.AppendLine(line1);
}
File.WriteAllText(OutputhFilePath, sb.ToString());
Console.ReadLine();
}
问题是您在每行之后输出到文件。 File.WriteAllText
的作用是总是用最新的数据覆盖目标文件。您需要的是附加到文件。例如尝试 File.AppendText
method.
然而,更好的解决方案是使用 StringBuilder
,将所有行附加到它,然后一次输出全部内容 (builder.ToString()
)。这样可以避免在每行之后过度打开和关闭文件。
我有一个代码:
- 读取文本文件,
- 用“;”替换所有“空格”,
- 删除重复的字符“;”
- 并保存包含所有更改的新文件。
但是它不会写入文件中的所有行,而是只写入最后一行。
static void Main(string[] args)
{
RegexOptions options = RegexOptions.None;
Regex regex = new Regex("[ ]{2,}", options);
string FilePath = @"C:\Users\User\Desktop\download1.txt";
string OutputhFilePath = @"C:\Users\User\Desktop\download2.txt";
List<string> lines = new List<string>();
lines = File.ReadAllLines(FilePath).ToList();
foreach (string line in lines)
{
string line1 = line.Replace(' ', ';');
line1 = regex.Replace(line, ";");
Console.WriteLine(line1);
File.WriteAllText(OutputhFilePath, line1);
}
Console.ReadLine();
}
有人可以帮我解决这些问题吗?提前致谢!
你需要 File.AppendAllText()
.
您正在用新行覆盖之前的每一行,这就是为什么您只看到最后输入行的原因。
Creates a new file, write the contents to the file, and then closes the file. If the target file already exists, it is overwritten.
所以你在读取的每一行中覆盖文件......你可以使用StringBuilder来做到这一点:
static void Main(string[] args)
{
RegexOptions options = RegexOptions.None;
Regex regex = new Regex("[ ]{2,}", options);
string FilePath = @"C:\Users\User\Desktop\download1.txt";
string OutputhFilePath = @"C:\Users\User\Desktop\download2.txt";
List<string> lines = new List<string>();
lines = File.ReadAllLines(FilePath).ToList();
var sb = new StringBuilder();
foreach (string line in lines)
{
string line1 = line.Replace(' ', ';');
line1 = regex.Replace(line, ";");
Console.WriteLine(line1);
sb.AppendLine(line1);
}
File.WriteAllText(OutputhFilePath, sb.ToString());
Console.ReadLine();
}
问题是您在每行之后输出到文件。 File.WriteAllText
的作用是总是用最新的数据覆盖目标文件。您需要的是附加到文件。例如尝试 File.AppendText
method.
然而,更好的解决方案是使用 StringBuilder
,将所有行附加到它,然后一次输出全部内容 (builder.ToString()
)。这样可以避免在每行之后过度打开和关闭文件。