【问题标题】:C#. Using all files in a folder, and writing a different string in a specific lineC#。使用文件夹中的所有文件,并在特定行中写入不同的字符串
【发布时间】:2013-09-10 09:52:00
【问题描述】:

我需要你的帮助。

问题是我的代码有效,它读取文件夹中的所有文件,这些文件是 96 个文本文件,并保存每个文件的路径。 然后我获取每个文件并更改文本文件中的第 32 行,即 "治疗";"1"; nr = 1,2,3,4,5,...,96。 我的程序将采用这个字符串并将其替换为不同的字符串,例如我将第一个文件更改为 "Treatment";"100";那么最后一个文件应该是“Treatment”;“196”;

所以为了解决这个问题,我用一条新线更改了整条线。但是当我将数字写入字符串时,当我从 1 开始时,第一个文件是正确的,但文件 2-10 是正确的。 12,23,34,45,56,67,78,89,然后从第 11 个文件开始 2,3,4,5,6,7。

这是为什么?我的代码如下。

我尝试将整数保存为字符串,因为虽然我以某种方式访问​​了 ASCII 表。但这也是一样的,所以我的代码没有任何想法?

    private void button1_Click(object sender, EventArgs e)
    {

        DialogResult result = folderBrowserDialog1.ShowDialog();
        if (result == DialogResult.OK)
        {

            int start = 1;
            string strengur = "\";";
            string myString = start.ToString();

            string[] filePaths = Directory.GetFiles(folderBrowserDialog1.SelectedPath);
            //foreach (var file in Directory.EnumerateFiles(folderBrowserDialog1.SelectedPath))
            for(int i = 0; i < 96 ; i++){

                var lines = File.ReadAllLines(filePaths[i]);
                lines[31] = "\"Treatment!!\";\"" +myString +strengur;
                File.WriteAllLines(filePaths[i], lines);
                start += 1;
                myString = start.ToString();
           }
        }
  }

最好的问候 Sæþór Ólafur Pétursson

【问题讨论】:

  • 您能提供给我们您正在使用的文件吗?您能否也解释一下您的意思是“然后我获取每个文件并更改文本文件中的第 32 行,即 "Treatment";"1"; nr = 1,2,3,4,5,..., 96。” - 我不确定我是否跟随。
  • 如何在此评论中添加文件?解释:
  • @Vijay 如何在此评论中添加文件?说明:我需要能够更改我正在做的治疗的编号。所以我在文本文件中有这些数据。第 32 行有“Treatment”;“nr”;对于每个实验,我得到 96 个文本文件。 “nr”中的范围为 1-96;我需要能够从我想要的数字而不是 1 开始,例如,如果我在第一个文件中从 200 开始,我会在最后一个文件中得到 296。
  • 将文件内容放入 pastebin 并在问题中添加链接。 :)

标签: c# string folderbrowserdialog


【解决方案1】:

在 Windows 资源管理器中显示所有这些文件,按名称排序,然后你就会明白为什么了。

为了解决这个问题,您可以根据每个文件的line31当前编号设置您的start,并添加100。例如:

 private void button1_Click(object sender, EventArgs e)
        {
            DialogResult result = folderBrowserDialog1.ShowDialog();
            if (result == DialogResult.OK)
            {
                string strengur = "\";";
                string[] filePaths = Directory.GetFiles(folderBrowserDialog1.SelectedPath);
                foreach(var file in filePaths)
                {
                    var lines = File.ReadAllLines(file);
                    int currentstart = int.Parse(lines[31].Split(';')[1].Trim('\"'));
                    lines[31] = "\"Treatment!!\";\"" + (currentstart+100).ToString() + strengur;
                    File.WriteAllLines(file, lines);
                }
            }
        }

根据您的评论进行编辑:

 private void button1_Click(object sender, EventArgs e)
    {
        DialogResult result = folderBrowserDialog1.ShowDialog();
        if (result == DialogResult.OK)
        {
            int start = 100; //set this to your user's input
            string strengur = "\";";
            string[] filePaths = Directory.GetFiles(folderBrowserDialog1.SelectedPath);
            foreach(var file in filePaths)
            {
                var lines = File.ReadAllLines(file);
                int currentstart = int.Parse(lines[31].Split(';')[1].Trim('\"'));
                lines[31] = "\"Treatment!!\";\"" + (currentstart+start-1).ToString() + strengur;
                File.WriteAllLines(file, lines);
            }
        }
    }

【讨论】:

  • 文件按名称排序,我的程序只需要用户输入从哪个整数开始。因此,我认为在每个字符串中找到数字并加上 100 并不是我想要的。我需要能够从我想要的位置开始,例如 90,然后最后一个文件将得到 186;
  • 不能把上面代码中的100改成你用户的输入吗??
  • 是的,我和我厚厚的头骨。非常感谢;D 它工作得很好。 @博卢。你摇滚!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-11
  • 2023-04-07
  • 2012-09-09
  • 2021-09-07
相关资源
最近更新 更多