快速改变txt文件并保存它
本文关键字:保存 文件 txt 改变 | 更新日期: 2023-09-27 18:05:05
我有txt文件(65mb),我需要逐行阅读并更改每行,例如,我有很多行
User=value Password=value Phone=123456789
User=value Password=value Phone=123456789
User=value Password=value Phone=123456789
和我需要更改信用卡/电话的第一个号码为*(安全原因),并得到这样的文本并保存它,或者只是更改原始文本文件。
User=value Password=value Phone=*****6789
User=value Password=value Phone=*****6789
User=value Password=value Phone=*****6789
我建立新的字符串,并添加到那里的行(更改)逐行保存,但它花了我很多时间,这是我的代码
string NewPath = "";
string lineOfText;
string NewTextFile = "";
using (var filestream = new FileStream(FilePath,
FileMode.Open,
FileAccess.Read,
FileShare.ReadWrite))
{
var file = new StreamReader(filestream, Encoding.UTF8, true, 128);
while ((lineOfText = file.ReadLine()) != null)//here i reading line by line
{
NewTextFile += lineOfText.Substring(0, 124) + "************" +
lineOfText.Substring(136, lineOfText.Length - 136);
NewTextFile += Environment.NewLine;//here i make new string
}
}
NewPath = FilePatharr[1] + "''temp.txt";
System.IO.File.WriteAllText(NewPath, NewTextFile);//here i save him
有人知道更好的方法吗?我的代码花了很长时间来保存这个大文件。
为什么我得到-2这个问题?这个问题有什么问题?我在这里看到的只有关于如何传递敏感数据和更多不属于这个问题的错误答案当问题是——>快速改变txt文件并保存它的方法
无论如何我发现如何做这个速度保存文件的速度从100kb'秒到3MB'秒现在它花了我20秒,而不是像以前的20分钟
您的主要问题是您正在添加一个字符串。这很快就会变得昂贵。您应该能够在大约5秒内处理65mb的数据。下面是我要做的:
string outputFileName = "temp.txt";
using (var outputFile = new StreamWriter(outputFileName))
{
foreach (var line in File.ReadLines(inputFileName))
{
var newLine = line.Substring(0, 124) + "************" +
line.Substring(136, lineOfText.Length - 136);
outputFile.WriteLine(newLine);
}
}
这将比附加字符串快得多。如果您真的想在内存中完成所有操作,那么请使用StringBuilder
。而不是
string NewTextFile = "";
使用StringBuilder NewTextFile = new StringBuilder();
在编写输出时,将字符串连接替换为:
NewTextFile.AppendLine(
lineOfText.Substring(0, 124) + "************" +
lineOfText.Substring(136, lineOfText.Length - 136));
最后,将其写入文件:
System.IO.File.WriteAllText(NewPath, NewTextFile.ToString());
您可以保留WriteAllLines
而使用ReadAllLines
:
-
ReadAllLines
获取所有行作为字符串数组 - 枚举数组并使用
string.Replace
逐行替换其内容 -
WriteAllLines
并覆盖现有文件
或者可以使用流读写器逐行读写。你目前正在构建一个包含数百万个连接的字符串,这就是性能问题。
话虽这么说,这里可能有一个明显的安全问题。为什么像信用卡号这样的关键信息首先要以纯文本的形式存储?
public static string ChangeCardNumber(string FilePath, string txtFileName)
{
string NewPath = "";
string lineOfText;
string NewTextFile = "";
NewPath = FilePatharr[0] + "''temp_" + txtFileName;
using (var filestream = new FileStream(FilePath,
FileMode.Open,
FileAccess.Read,
FileShare.ReadWrite))
{
var file = new StreamReader(filestream, Encoding.UTF8, true, 128);
System.IO.File.Create(NewPath).Close();
int res = 0;
while ((lineOfText = file.ReadLine()) != null)
{
res++;
if (!lineOfText.Contains("EOF"))
{
NewTextFile += lineOfText.Substring(0, 124) + "************" +
lineOfText.Substring(136, lineOfText.Length - 136);
NewTextFile += Environment.NewLine;
}
if (res % 200 == 0 || lineOfText.Contains("EOF"))//check if endline and if in NewTextFile 200lines
{
System.IO.File.AppendAllText(NewPath, NewTextFile);
NewTextFile = "";
}
}
}
return NewPath;
}
我想你可以用另一种方式来做,而这种方式就是我用来满足我所有储蓄需求的方式。如果你想保存这一切在同一时间,那么这将工作!或者你可以将它加载到VARIABLES中,然后保存它,下面是保存它的代码。编辑
非常简单和容易where You Go
用文本 添加新行的基本代码echo your text here >>filename.txt
说明请访问DropBox链接:https://www.dropbox.com/s/nufkecx1b8088cu/HOW%20TO%20USE%20THIS.txt