我怎么能得到文本,并把另一个文本文件

本文关键字:文本 另一个 文件 怎么能 | 更新日期: 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);