我怎么能得到文本,并把另一个文本文件
本文关键字:文本 另一个 文件 怎么能 | 更新日期: 2023-09-27 18:12:42
我有一个Windows窗体应用程序,我想从test.txt
复制数据,在test2.txt
的文本文件。在test.txt中,我有下面的行:
Licfile="C:'temp'lic.lic"
Output="C:'temp'out.log"
Title="name"
和在test2.txt
我有:
outlog=
license=
lmgr_files=
license_path=
我想要这样写
outlog="C:'temp'out.log"
license_path="C:'temp'lic.lic"
lmgr_files=false
license=true
正如您所看到的,我需要一个不提及行数的代码,并且字段的名称是不同的。为此,我尝试了以下代码:
private void Install_Click(object sender, EventArgs e)
{
string path = AppDomain.CurrentDomain.BaseDirectory.ToString();
var link = File.ReadLines(path + "test.txt").ToArray();
foreach (var txt in link)
{
if (txt.Contains("Output="))
{
var outputPath = txt.Split('=')[1];
if (File.Exists(path + "test2.txt")) File.AppendAllText(path + "test2.txt", outputPath);
else
{
File.AppendAllText(path + "test2.txt", "outlog =" + outputPath);
}
}
else if (txt.Contains("Licfile="))
{
var LicFilePath = txt.Split('=')[1];
if (File.Exists(path + "test2.txt")) File.AppendAllText(path + "test2.txt", LicFilePath);
else
{
File.AppendAllText(path + "test2.txt", "license_path =" + LicFilePath);
}
}
}
}
但这并没有完成所有的任务,当我在test2.txt中运行时出现:
outlog=
license_path="C:'temp'out.log""C:'temp'lic.lic"
lmgr_files=
license=
我怎样才能使它正常工作,这不是一个简单的方法,做到这一点?
在我的代码中,我使用这个代码来获取Title
并放入框架的TEXT
,但是我不知道如何在两个文本文件之间使用
this.Text = File.ReadLines(link)
.First(x => x.StartsWith("Title='""))
.Split(new[] { '=', '"' }, StringSplitOptions.RemoveEmptyEntries)[1];
您的问题主要来自File.AppendAllText()
的使用,这为文件添加了新行,这似乎不是您想要做的。
当你操作这样的文件时,你应该重建整个文件。唯一的反对意见是处理大文件……但事实并非如此。
读取第二个文件的输入参数,并用第一个文件的输入扩展它们,然后将整个结果写入文件。
Edit:由于提供了新的信息而编辑
//I have no IDE at the moment so it's pseudo C#
//Have you tried something like this?
string path = AppDomain.CurrentDomain.BaseDirectory.ToString();
var linkFirstFile = File.ReadLines(path + "test.txt").ToArray();
var linkSecondFile = File.ReadLines(path + "test2.txt").ToArray();
var mapping = new Dictionary<string, string>(){
{"outlog=", "Output"},
{"license=", ""},
{"lmgr_files=", ""},
{"license_path=", "Licfile"},
};
foreach(var part in linkSecondFile)
{
part += linkFirstFile.FirstOrDefault(x => x.StartsWith(mapping[part]))
}
File.WriteAllLines(path2, linkSecondFile);
我认为没有必要使用循环。如果只有这些静态数据。试试这个:
//Started from array of strings - (you may read from file and put in the arrays)
string path = AppDomain.CurrentDomain.BaseDirectory;
string[] text1 = System.IO.File.ReadAllLines(path + "test.txt");
string[] text2 = System.IO.File.ReadAllLines(path + "test2.txt");
text2[0] = text2[0] + text1.Where(x => x.Split('=')[0] == "Output").FirstOrDefault().Split('=')[1];
text2[1] = text2[1] + text1.Where(x => x.Split('=')[0] == "Licfile").FirstOrDefault().Split('=')[1];
text2[2] = text2[2] + "false";
text2[3] = text2[3] + "true";
//Now the result variable will contain the final text, you can write in a file.
string result = string.Join(Environment.NewLine, text2);