Сгенерируйте список имен файлов в каталоге, измените имя файла, но при этом сможете получить доступ к полному пути winforms

#c# #winforms #file #file-io

#c# #winforms #файл #file-io

Вопрос:

Я создаю приложение, используя C # и WinForms. У меня есть код, который рекурсивно перебирает каталог, чтобы получить имя файла. Затем я изменяю имя файла и отображаю измененное имя в ListBox . Моя проблема в том, что я потерял полный путь. Мне нужно сохранить полный путь для дальнейшей обработки, но не отображаемый на ListBox .

 foreach (string fileName in Directory.GetFiles(path))
{
    String displayedName = "";
    String fullPath = fileName;
    if (fileName.Contains("tsv"))
    {
        try
        {
            //make changes here
        }
        catch (Exception e)
        {
        }
    }
}

foreach (string directory in Directory.GetDirectories(path))
{
    FindFiles(directory);
}
  

Комментарии:

1. создайте пользовательский тип, который содержит путь, и переопределите . Метод toString для отображения только имени файла. Затем вы можете получить путь из selecteditem по мере необходимости.

Ответ №1:

Вот пример того, о чем я говорю. Вы должны быть в состоянии включить это в свой существующий код, поскольку это не что иное, как создание класса, помещение информации в объект, а затем показывает, как получить ее обратно. Просто добавьте кнопку и поле списка в новый проект и поместите этот код в соответствующие места.

   private void button1_Click(object sender, EventArgs e)
    {
        string DemoPath = @"D:MyImagesMyPicture.jpg";

        string filestring = Path.GetFileName(DemoPath); //filename only
        string pathstring = Path.GetDirectoryName(DemoPath); //path only
        MyFileInfo nfo = new MyFileInfo(); //instantiate your object
        nfo.fileName = filestring; //fill the properties
        nfo.filePath = pathstring;
        listBox1.Items.Add(nfo); //add it to the listbox (only filename shows)
     }

    private void listBox1_DoubleClick(object sender, EventArgs e)
    {
        //cast the selected item back to the MyFileInfoType and get its filePath
        string pathFromSelection = (listBox1.SelectedItem as MyFileInfo).filePath;
        MessageBox.Show(pathFromSelection);
    }


class MyFileInfo
{
    public string fileName { get; set; }
    public string filePath { get; set; }

    public override string ToString()
    {
        //Here we tell the object to only display the filename
        return fileName;
    }
}