Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获取文本并放入另一个文本文件?_C#_Visual Studio 2012 - Fatal编程技术网

C# 如何获取文本并放入另一个文本文件?

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

我有一个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=
我怎样才能使它正常工作,而这不是一个简单的方法,做到这一点

在我的代码中,我使用此代码获取框架的
标题
,并放入
文本
, 但我不知道如何在两个文本文件之间使用

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、 …但如果你添加一些像这样的外来元素,它会越来越难…我的数据不是有序的,我提到过,我不想把它放在