如何使用 C# 切换目录
本文关键字:何使用 | 更新日期: 2023-09-27 18:33:34
(这是对这个问题的讨论的延续(我的代码在 C: 驱动器中的特定文件夹中查找。它可以告诉该文件夹中的内容,并获取用户选择的内容。但问题是切换到一个新的数据文件夹来获取代码。
运行程序所需的所有代码都保存在 Data 文件夹中,我实习的公司希望能够切换 Data 文件夹,以便他们可以更好地展示他们的软件,并使其面向他们展示给任何人。
所以基本上我的程序需要切换数据文件夹,以便公司可以更好地显示他们的软件。
我发布了我所有的代码,它不多,所以你们可以查看所有代码。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
string defaultPath = @"C:'Mavro'MavBridge'";
public Form1()
{
InitializeComponent();
dropdown();
}
private void button1_Click(object sender, EventArgs e)
{
//some sort of code to switch directory before close goes here
MessageBox.Show("Data folder has been changed.", "Done");
Application.Exit();
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
string path = comboBox1.SelectedItem.ToString();
defaultPath = path;
}
private void buttonTest_Click_1(object sender, EventArgs e)
{
}
public void dropdown()
{
string[] dispDirectories = Directory.GetDirectories(defaultPath, "Data*");
comboBox1.Items.Clear();
comboBox1.Items.AddRange(dispDirectories);
}
}
}
回答第二个问题,关于从组合框显示中删除默认路径
//Where you load your directories
string[] dispDirectories = Directory.GetDirectories(@"c:'", "*.*");
// so here we will iterate through all the directories found and remove the default path from it.
for (int i=0;i<dispDirectories.Count();i++)
dispDirectories[i]=dispDirectories[i].Remove(0, defaultPath.Length);
然后,您设置路径的位置将更改为此路径。 因为我们删除了默认路径,所以我们现在必须再次添加它。
string path = defaultPath+comboBox1.SelectedItem.ToString();
defaultPath = path;
看看你的button1_Click方法。 将消息框更改为
MessageBox.Show("Data folder has been changed to "+defaultPath,"Done");
private void button1_Click(object sender, EventArgs e)
{
//some sort of code to switch directory before close goes here
MessageBox.Show("Data folder has been changed to "+defaultPath,"Done");
Application.Exit();
}
您将看到您已经更改了默认路径
编辑(@K'腿 建议使答案更清晰(:如果要获取子目录,在进行第一次选择后,您应该在comboBox1_SelectedIndexChanged
中调用方法dropdown()
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
string path = comboBox1.SelectedItem.ToString();
defaultPath = path;
dropdown();
}
更好的方法是在 dropdown(( 中接收默认路径作为参数,在下一行中的内容
public void dropdown(string defaultPath)
{
string[] dispDirectories = Directory.GetDirectories(defaultPath, "Data*");
comboBox1.Items.Clear();
comboBox1.Items.AddRange(dispDirectories);
}
然后在comboBox1_SelectedIndexChanged中调用下拉列表方法,如下所示:
dropdown(comboBox1.SelectedItem.ToString());
编辑:(基于对OP的评论(问题是您为GetDirecotries指定的过滤器,对于您传递给它的每条路径,它都会查找以Data开头的文件夹,然后查找任何字符,例如Data.Apple,现在当您将路径设置为Data.Apple时,它会再次查找应以Data开头的文件夹, 在某些情况下,您可以在下拉方法中传递过滤器
您可以将方法下拉列表定义为:
public void dropdown(string defaultPath, string filter)
{
string[] dispDirectories = Directory.GetDirectories(defaultPath, filter);
comboBox1.Items.Clear();
comboBox1.Items.AddRange(dispDirectories);
}
然后,您可以首次调用下拉列表:公共表单1(( { 初始化组件((; dropdown(@"C:''Mavro''MavBridge''","Data*"(; }然后在 选定索引更改为:
dropdown(comboBox1.SelectedItem.ToString(),"*"); // * means select all