combolistbox.Item.Add(FileInfo)不一致?

时间:2012-04-02 12:46:35

标签: c# checkedlistbox fileinfo

我对这种方法有点麻烦。

当我遍历dragDropFiles中的FileInfo类型对象并将每个对象单独添加到CLB时,我会在选中项目时返回FullName属性(文件的完整路径,这就是我需要的)。 但是使用hotFolderFiles而不是路径它只给我文件名。

我不明白这一点,因为他们以相同的方式添加相同的对象类型。

(我也尝试使用DirectoryInfo而不是我的Dictionary获取热文件夹文件的FileInfo,结果相同)

为什么这种行为不一致? (如何让它返回fileInfo fullName而不是Name?)

    public frmFilesFound(string hotFolderPath, Dictionary<string, FileInfo> dragDropFiles, Dictionary<string, FileInfo> hotFolderFiles, bool ReadOnly)
    {
        try
        {
            InitializeComponent();
            readOnly = ReadOnly;

            btnSelectAll.Visible = true;
            clbSelectFilesFound.Visible = true;
            clbSelectFilesFound.FormattingEnabled = true;
            clbSelectFilesFound.Format += (s, e) => { e.Value = string.Format("{0}", ((FileInfo)e.ListItem).Name); };


            foreach (FileInfo fileInfo in dragDropFiles.Values)
            {
                if (!clbSelectFilesFound.Items.Contains(fileInfo))
                {
                    try
                    {
                        // If file not already present, add it to listbox
                        clbSelectFilesFound.Items.Add(fileInfo);
                    }
                    catch (Exception ex) { MessageBox.Show("Error: " + ex.Message); }
                }
            }
            //intended to be hot folder path
            if (!String.IsNullOrEmpty(hotFolderPath))
            {
                DirectoryInfo dirInfo = new DirectoryInfo(hotFolderPath);

                foreach (FileInfo fileInfo in dirInfo.GetFiles())
                //foreach (FileInfo fileInfo in hotFolderFiles.Values)
                {
                    if (!clbSelectFilesFound.Items.Contains(fileInfo))
                    {
                            try
                            {
                                clbSelectFilesFound.Items.Add(fileInfo);
                            }
                            catch (Exception ex) { MessageBox.Show("Error: " + ex.Message); }
                    }
                }
            }
            lblDisplayedSelectMessage.Text = "More than one file is waiting.  Please select the files you would like to use.";
        }
        catch (Exception ex)
        { MessageBox.Show(ex.ToString()); }

    }

2 个答案:

答案 0 :(得分:1)

这是因为DirectoryInfo.GetFiles方法只填写文件的名称,而不是完整路径。

如果您只想在所有情况下显示文件名,请尝试使用此格式化程序:

clbSelectFilesFound.Format += (s, e) => { e.Value = Path.GetFileNameWithoutExtension(((FileInfo)e.ListItem).Name); };

答案 1 :(得分:0)

为什么不总是添加(fileInfo.FullName)?