Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#组合框、readall和工作目录_C# - Fatal编程技术网

C#组合框、readall和工作目录

C#组合框、readall和工作目录,c#,C#,我拥有的是一个由代码填充的组合框: InitializeComponent(); DirectoryInfo dinfo = new DirectoryInfo(@"K:\ases"); FileInfo[] Files = dinfo.GetFiles("*.ssi", SearchOption.AllDirectories); foreach (FileInfo file in Files) { comb

我拥有的是一个由代码填充的组合框:

InitializeComponent();
        DirectoryInfo dinfo = new DirectoryInfo(@"K:\ases");
        FileInfo[] Files = dinfo.GetFiles("*.ssi", SearchOption.AllDirectories);
        foreach (FileInfo file in Files)
        {
            comboBox1.Items.Add(file.Name);
        }
然后我尝试从所选项目中读取所有文本

    string contents = File.ReadAllText(comboBox1.Text);
执行时,它尝试从区域设置路径读取文件,当然文件不在那里。我也无法设置工作目录,因为combobox是从大量子目录填充的。如何在不向用户公开整个目录路径的情况下获取组合框中所选项目的工作目录

欢迎任何帮助


我想我看到了一些答案,有人建议保密,并把东西藏在一个组合框中,这些建议被记录下来。有没有办法将完整的文件信息保存在组合框中,只显示文件名?

有几种不同的方法可以实现这一点,但最简单的方法是将目录路径存储在实例变量中(我们称之为
directoryPath
),并使用
System.IO.path.Combine()
要重建路径,请执行以下操作:

(为了简洁起见,删除了一些代码)

您还可以尝试将
FileInfo
添加到
组合框中,而不是文件名中,并使用
SelectedItem
而不是
文本

    InitializeComponent();

    DirectoryInfo dinfo = new DirectoryInfo(@"K:\ases");
    comboBox1.DataSource = dinfo.GetFiles("*.ssi", SearchOption.AllDirectories);

    comboBox1.DisplayMember = "Name";
然后,您可以执行以下操作来检索文件:

FileInfo file = (FileInfo)comboBox1.SelectedItem;

string contents = File.ReadAllText(file.FullName);
而不是:

comboBox1.Items.Add(file.Name);
做:

这将获得文件的完整路径,以便读取它


有关更多详细信息和其他要使用的属性,请参阅。

我认为最好的方法是对项目使用特殊类:

class FileInfoItem {
    public FileInfoItem(FileInfo info) {
        Info = info;
    }

    public FileInfo Info { get; set; }

    public override string ToString() {
        return Info.Name;
    }
}
要在组合框中添加项目,请使用以下代码:

comboBox1.Items.Add(new FileInfoItem(file));
ComboBox将显示项目的ToString()值,您还可以通过以下方式获取原始文件信息:

((FileInfoItem)comboBox1.SelectedItem).Info;

他明确表示他不想将整个路径暴露给用户。我应该提到的是,我的两个代码都在他们自己单独的私有目录下void@Mike这是我的假设。这两种方法中的任何一种都可以很好地解决这个问题。我知道directoryPath=dinfo.FullName是问题所在,但如何将其解析为找到的文件的完整路径;在foreach中,提取所有路径:/@Mike:如果文件来自子目录,那么第二个解决方案(使用
DataSource
属性并设置
DisplayMember
)绝对是正确的解决方案。当您可以更改组合框的
DisplayMember
属性以显示文件名时,为什么要包装
FileInfo
类?
comboBox1.Items.Add(new FileInfoItem(file));
((FileInfoItem)comboBox1.SelectedItem).Info;