C# 如何获取文本并放入另一个文本文件?
我有一个Windows窗体应用程序,我想从C# 如何获取文本并放入另一个文本文件?,c#,visual-studio-2012,C#,Visual Studio 2012,我有一个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\l
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=
我怎样才能使它正常工作,而这不是一个简单的方法,做到这一点
在我的代码中,我使用此代码获取框架的标题
,并放入文本
,
但我不知道如何在两个文本文件之间使用
this.Text = File.ReadLines(link)
.First(x => x.StartsWith("Title=\""))
.Split(new[] { '=', '"' }, StringSplitOptions.RemoveEmptyEntries)[1];
我认为不需要循环。如果您只有这个静态数据。试试这个:
//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);
我认为不需要循环。如果您只有这个静态数据。试试这个:
//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);
您的问题主要来自于使用
File.AppendAllText()
,这会在文件中添加一行新内容,而您似乎不希望这样做
在处理此类文件时,应重新生成整个文件。唯一的反对意见是处理大文件。。。但事实并非如此
读取第二个文件的输入参数,并使用第一个文件的输入扩展它们,然后将整个结果写入该文件
编辑:根据提供的新信息进行编辑
//我目前没有IDE,所以它是伪C#
//你试过这样的东西吗?
字符串路径=AppDomain.CurrentDomain.BaseDirectory.ToString();
var linkFirstFile=File.ReadLines(路径+“test.txt”).ToArray();
var linkSecondFile=File.ReadLines(路径+“test2.txt”).ToArray();
var-mapping=newdictionary(){
{“outlog=”,“Output”},
{“license=”,“”},
{“lmgr_files=”,“”},
{“license_path=,“Licfile”},
};
foreach(linkSecondFile中的var部分)
{
part+=linkFirstFile.FirstOrDefault(x=>x.StartsWith(映射[part]))
}
writeAllines(路径2,linkSecondFile);
您的问题主要来自于使用File.AppendAllText()
,这会在文件中添加一行新的内容,而您似乎不希望这样做
在处理此类文件时,应重新生成整个文件。唯一的反对意见是处理大文件。。。但事实并非如此
读取第二个文件的输入参数,并使用第一个文件的输入扩展它们,然后将整个结果写入该文件
编辑:根据提供的新信息进行编辑
//我目前没有IDE,所以它是伪C#
//你试过这样的东西吗?
字符串路径=AppDomain.CurrentDomain.BaseDirectory.ToString();
var linkFirstFile=File.ReadLines(路径+“test.txt”).ToArray();
var linkSecondFile=File.ReadLines(路径+“test2.txt”).ToArray();
var-mapping=newdictionary(){
{“outlog=”,“Output”},
{“license=”,“”},
{“lmgr_files=”,“”},
{“license_path=,“Licfile”},
};
foreach(linkSecondFile中的var部分)
{
part+=linkFirstFile.FirstOrDefault(x=>x.StartsWith(映射[part]))
}
writeAllines(路径2,linkSecondFile);
是的,但是如果我修改行的顺序,我需要修改代码,我不想这样做。我想要这样的东西。Text=File.ReadLines(link)。首先(x=>x.StartsWith(“Title=\”)..…现在您添加了另一个键“Title”?在原始问题的任何文件文本中都没有提到?该标题对test2.txt不重要,这就是我没有提到的原因。我需要用test2替换text2,并且开始放置字符串path=AppDomain.CurrentDomain.BaseDirectory.ToString();var link=file.ReadLines(path+“test.txt”).ToArray();?您将在“result”变量中获得最终文本。您是否还希望我在测试文件中编写此代码?您已经这样做了。是的,但是,如果我修改行的顺序,我需要修改代码,而我不想这样做。我想要这样的东西。text=file.ReadLines(link)。首先(x=>x.StartsWith(“Title=\”)…现在您添加了另一个键“Title”?在原始问题中的任何文件文本中都没有提到?该标题对test2.txt不重要,这就是我不提及的原因我需要用test2替换text2,并且开始放置字符串path=AppDomain.CurrentDomain.BaseDirectory.ToString();var link=File.ReadLines(path+“test.txt”).ToArray();?您将在“result”变量中获得最终文本。您是否还希望我在测试文件中编写此代码。您已经这样做了。如果您只想.ToArray()
你的读线
,那么你也可以用读线
来代替。但是在这种情况下,因为你只是在链接上迭代
,所以放下.ToArray()
,只使用读线
返回的IEnumerable
。如果你只想.ToArray()
你的读线
,那么你也可以使用读线
来代替。但是在这种情况下,因为你只是在链接上迭代
,所以请删除.ToArray()
只需使用ReadLines
返回的IEnumerable
就可以了……还有?这个标题是从哪里来的?首先很难给你一个答案……但是如果你添加一些像这样的外来元素,它会越来越难……我的数据没有顺序,我提到我不想输入行数JU看看结构,我想帮你看看我想说什么。我想在test2.txt中搜索我有输出日志的地方,然后等于复制输出后的内容=来自test1.txt它不起作用,我把部分改成path,把部分改成path,把部分改成path…还有?这个标题是从哪里来的?很难在第一个地方给你一个答案e、 …但如果你添加一些像这样的外来元素,它会越来越难…我的数据不是有序的,我提到过,我不想把它放在