C# 如何根据所选组合框声明路径?
我有名为TST-D0123、TST-D0245、TST-D0568的文件夹。此文件夹将列在组合框中。现在,我必须设置基于文件夹名称生成新DataFile.txt的路径。我该怎么做 这是组合框代码:C# 如何根据所选组合框声明路径?,c#,C#,我有名为TST-D0123、TST-D0245、TST-D0568的文件夹。此文件夹将列在组合框中。现在,我必须设置基于文件夹名称生成新DataFile.txt的路径。我该怎么做 这是组合框代码: private void comboBox2_SelectedIndexChanged(object sender, EventArgs e) { if ((string)comboBox2.SelectedItem == "TST-D0123") {
private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
if ((string)comboBox2.SelectedItem == "TST-D0123")
{
Path = $@"G:\Eng\Share\PC\TST-D0123\SSD\SN\D0123_DataFile.txt";
logPath = $@"G:\Eng\Share\PC\TST-D0123\SSD\SystemLog\SystemLog_{DateTime.Now:yyyyMMdd-HHmm}.txt";
generateFile()
}
else if ((string)comboBox2.SelectedItem == "TST-D0245")
{
Path = $@"G:\Eng\Share\PC\TST-D0245\SSD\SN\D0245_DataFile.txt";
logPath = $@"G:\Eng\Share\PC\TST-D0245\SSD\SystemLog\SystemLog_{DateTime.Now:yyyyMMdd-HHmm}.txt";
generateFile()
}
else
{
Path = $@"G:\Eng\Share\PC\TST-D0568\SSD\SN\D0568_DataFile.txt";
logPath = $@"G:\Eng\Share\PC\TST-D0568\SSD\SystemLog\SystemLog_{DateTime.Now:yyyyMMdd-HHmm}.txt";
generateFile();
}
}
这是生成新文件DataFile.txt的代码
private void generateFile()
{
dbConnect();
SqlCommand command_Data;
SqlDataReader dataReader;
String sql = "";
sql = "SELECT TOP(1) start_rg, end_rg FROM Rg WHERE status = 'Avail' ";
command_Data = new SqlCommand(sql, cnn);
dataReader = command_Data.ExecuteReader();
//how to set this path based on selected text in combobox?
string Path = $@"G:\Eng\Share\PC\**foldername**\SSD\SN\**4char from foldername**_DataFile.txt";
using (StreamWriter tw = File.CreateText(Path))
{
while (dataRead.Read())
{
tw.WriteLine("RG");
tw.WriteLine("StartRG={0}", dataRead["start_rg"]);
tw.WriteLine("EndRG={0}", dataRead["end_rg"]);
}
}
dataReader.Close();
command_Data.Dispose();
}
首先,由于文件夹名称是组合框中的项目,因此是SelectedItem,因此可以直接使用它创建
路径
和日志路径
,而不是一组if条件
和显式分配路径
比如说,
private void组合框2\u SelectedIndexChanged(对象发送方,事件参数e)
{
if(comboBox2.SelectedItem是字符串文件夹&&!string.IsNullOrEmpty(文件夹)&&文件夹包含(“-”)
{
Path=$@“G:\Eng\Share\PC\{folder}\SSD\SN\{folder.Split('-')[0]}\u DataFile.txt”;
logPath=$@“G:\Eng\Share\PC\{folder}\SSD\SystemLog\SystemLog{DateTime.Now:yyyyMMdd HHmm}.txt”;
generateFile(路径);//解释如下
}
}
您可以将Path变量直接传递给GenerateFile
方法,因为创建两次路径没有意义
private void generateFile(string path)
{
dbConnect();
SqlCommand command_Data;
SqlDataReader dataReader;
String sql = "";
sql = "SELECT TOP(1) start_rg, end_rg FROM Rg WHERE status = 'Avail' ";
command_Data = new SqlCommand(sql, cnn);
dataReader = command_Data.ExecuteReader();
using (StreamWriter tw = File.CreateText(path))
{
while (dataRead.Read())
{
tw.WriteLine("RG");
tw.WriteLine("StartRG={0}", dataRead["start_rg"]);
tw.WriteLine("EndRG={0}", dataRead["end_rg"]);
}
}
dataReader.Close();
command_Data.Dispose();
}
只需将所选文件名传递给
generateMethod
。您需要将方法的签名更改为acept字符串。您的代码应该如下所示:
private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
var folderName = comboBox2.SelectedItem.ToString();
if (folderName == "TST-D0123")
{
Path = $@"G:\Eng\Share\PC\TST-D0123\SSD\SN\D0123_DataFile.txt";
logPath = $@"G:\Eng\Share\PC\TST-D0123\SSD\SystemLog\SystemLog_{DateTime.Now:yyyyMMdd-HHmm}.txt";
}
else if (folderName == "TST-D0245")
{
Path = $@"G:\Eng\Share\PC\TST-D0245\SSD\SN\D0245_DataFile.txt";
logPath = $@"G:\Eng\Share\PC\TST-D0245\SSD\SystemLog\SystemLog_{DateTime.Now:yyyyMMdd-HHmm}.txt";
}
else
{
Path = $@"G:\Eng\Share\PC\TST-D0568\SSD\SN\D0568_DataFile.txt";
logPath = $@"G:\Eng\Share\PC\TST-D0568\SSD\SystemLog\SystemLog_{DateTime.Now:yyyyMMdd-HHmm}.txt";
}
generateFile(folderName);
}
private void generateFile(string folderName)
{
dbConnect();
SqlCommand command_Data;
SqlDataReader dataReader;
String sql = "";
sql = "SELECT TOP(1) start_rg, end_rg FROM Rg WHERE status = 'Avail' ";
command_Data = new SqlCommand(sql, cnn);
dataReader = command_Data.ExecuteReader();
var fileName = folderName.Substring(0, 4);
string Path = $@"G:\Eng\Share\PC\{foldername}\SSD\SN\{fileName}_DataFile.txt";
using (StreamWriter tw = File.CreateText(Path))
{
while (dataRead.Read())
{
tw.WriteLine("RG");
tw.WriteLine("StartRG={0}", dataRead["start_rg"]);
tw.WriteLine("EndRG={0}", dataRead["end_rg"]);
}
}
dataReader.Close();
command_Data.Dispose();
}
从使用组合框的方法中可以看出,类似的逻辑可以应用于这个巨大的if,所有代码都可以大大简化。此外,我猜您希望从文件夹名称中提取5个字符,但这取决于您:
private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
var folderName = comboBox2.SelectedItem.ToString();
var fileName = folderName.Substring(0, 4);
var Path = $@"G:\Eng\Share\PC\{foldername}\SSD\SN\{fileName}_DataFile.txt";
var logPath = $@"G:\Eng\Share\PC\{foldername}\SSD\SystemLog\SystemLog_{DateTime.Now:yyyyMMdd-HHmm}.txt";
generateFile(folderName);
}
您可以直接将
Path
参数传递到generateFile()
函数中
您还可以将文件夹变量直接分配到字符串中,而不是使用大量if-else语句为每个变量添加硬编码路径
示例:
private void组合框2\u SelectedIndexChanged(对象发送方,事件参数e)
{
如果(comboBox2.SelectedItem)是字符串文件夹
&&!string.IsNullOrEmpty(文件夹))
{
//Get FolderName(获取文件夹名称在“-”之后的一部分)
字符串folderName=文件夹.Split('-')[1];
//将变量插入folderPath
字符串路径=$@“G:\Eng\Share\PC\{folder}\SSD\SN\{folderName}\u DataFile.txt”;
//在日志路径中插入变量
字符串logPath=$@“G:\Eng\Share\PC\{folder}\SSD\SystemLog
+\SystemLog{DateTime.Now:yyyyMMdd HHmm}.txt”;
生成文件(路径);
}
}
生成文件方法:
private void generateFile(字符串路径)
{
.....
}