使用循环编辑参数

本文关键字:参数 编辑 循环 | 更新日期: 2023-09-27 18:13:23

我正在尝试更改一系列4 .bat文件。当我运行该程序时,它提示我输入,然后将其写入.bat文件。

我从microsoft文档中的File中获取了下面的代码。Openwrite,然后添加一些指向文件的变量。

与复制/粘贴实际写入文本的代码相反,我在它周围放置了一个for循环,目的是改变参数,以便File。OpenWrite部分将在每次迭代期间查找不同的变量(因此是不同的路径/目录)。我确认循环工作(如果我输入一个路径#变量,它将迭代并写入该文件4次)和该文件。OpenWrite每次迭代都能看到正确的文本。我唯一的猜测是,它从字面上看'path#'参数,而不是将其视为变量。有人能告诉我如何通过迭代来改变这个参数吗?
using System;
using System.IO;
using System.Text;
class Test
{
    public static void Main()
    {
        string path = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
        string path0 = path + @"'down_fa.bat";
        string path1 = path + @"'down_ng.bat";
        string path2 = path + @"'down_os.bat";
        string path3 = path + @"'down_sp.bat";
        string portinput = Console.ReadLine();
        string dotbatinput = "DDL -p" + portinput;
        // Open the stream and write to it. 
        for (int i = 0; i < 4; i++)
        {
            using (FileStream fs = File.OpenWrite("path" + i))
            {
                Byte[] info =
                    new UTF8Encoding(true).GetBytes(dotbatinput);
                // Add some information to the file.
                fs.Write(info, 0, info.Length);
            }
        }
    }
}

使用循环编辑参数

不能使用字符串和连接数字来引用代码中声明的变量。通过这种方式,您将一个字面值字符串传递给OpenWrite方法,而不是名称等于您的字符串的变量的内容。

一种更简单的方法是将每个批处理文件添加到字符串列表中,然后在该列表中循环编写所需的内容

string path = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
List<string> batFiles = new List<string>();
batFiles.Add(System.IO.Path.Combine(path, "down_fa.bat"));
batFiles.Add(System.IO.Path.Combine(path, "down_ng.bat"));
batFiles.Add(System.IO.Path.Combine(path, "down_os.bat"));
batFiles.Add(System.IO.Path.Combine(path, "down_sp.bat"));
string portinput = Console.ReadLine();
string dotbatinput = "DDL -p" + portinput;
foreach(string batFile in batFiles)
{
    using (FileStream fs = File.OpenWrite(batFile))
    {
     -----
    }
}
File.OpenWrite("path" + 0) != File.OpenWrite(path0)

左边打开一个流到一个名为"path0"的文件,您将在项目的bin'Debug目录中找到该文件,右边的示例在字符串path0中指定的位置写入一个文件。其他数也是一样。一个可能的解决方案是使用数组或列表:

string[] paths = new string[4].Select(x => System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)).ToArray();
string[0] += ...;
string[1] += ...;
string[2] += ...;
string[3] += ...;
foreach (string path in paths)
{
    using (FileStream fs = File.OpenWrite(path))
    {
        // do stuff
    }
}