如何使用 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);
            }
        }
     }

如何使用 C# 切换目录

回答第二个问题,关于从组合框显示中删除默认路径

//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