#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;
}
}