combolistbox.Item.Add (FileInfo) не соответствует? - PullRequest
0 голосов
/ 02 апреля 2012

У меня проблемы с этим методом.

Когда я перебираю объекты типа FileInfo в dragDropFiles и добавляю каждый из них по отдельности в CLB, я получаю свойство FullName (полный путь к файлу, который мне нужен), возвращаемое при проверке элемента. Однако с помощью hotFolderFiles вместо пути он дает мне только имя файла.

Я не понимаю этого, потому что они добавляют один и тот же тип объекта одним и тем же способом.

(я также пытался получить FileInfo для файлов горячих папок, используя DirectoryInfo вместо моего словаря с теми же результатами)

Почему это поведение несовместимо? (и как я могу заставить его возвращать 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 ]

1 голос
/ 02 апреля 2012

Это связано с тем, что метод DirectoryInfo.GetFiles заполняет только имя файла, а не полный путь.

Попробуйте использовать этот форматер, если хотите, чтобы имя файла отображалось только во всех случаях:

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

0 голосов
/ 02 апреля 2012

Почему вы просто не всегда добавляете (fileInfo.FullName)?

...