使用循环编辑参数
本文关键字:参数 编辑 循环 | 更新日期: 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
}
}