Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/114: Рейтинг темы: голосов - 114, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 04.03.2013
Сообщений: 14
1

Получить имя файла без полного пути

01.04.2013, 00:07. Показов 21754. Ответов 28
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
вы друзья уж простите, я 25 страниц пролистал в поиске но не нашел ответа (может не правильно искал) тема такая:
C#
1
2
3
            var path = Application.StartupPath;
            comboBox1.Items.Clear();
            var dbf_File = Directory.GetFiles(@path, "*.xml");
дальше ступор.

для себя делаю прогу (потому что подруга отказывается мне зачитывать таблицы английского языка) которая тестирует по английскому языку. замысел такой чтобы из комбо бокса открывались файлы которые находятся в папке с запускаемой программой в формате xml. так вот я понял как это сделать но хочется же все чистенько (я сейчас по коду приведенному выше получаю ответ в комбе: ".\test1.xml" а хотелось бы получить "test1" а если назову-я изучаю инглиш.xml то хотелось бы получить без пути и расширения файла в списке. Еще раз повторюсь что прога делается для себя поэтому не обязательно то о чем я пишу.
зы :: просто мне захотелось косметикой заняться ну и попрактиковаться заодно, но тыкал-тыкал так и не вышло( поэтому и спросил.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.04.2013, 00:07
Ответы с готовыми решениями:

Выделить из полного пути к файлу только имя файла
Дана строка, содержащая полное имя файла, то есть имя диска, список каталогов (путь), собственно...

Как извлечь имя файла без его полного пути и расширения?
как извлечь имя файла без его полного пути и расширения? какой код для кнопки сохранить в...

Получить имя файла без расширения
Дана строка, содержащая полное имя файла, то есть имя диска, список каталогов (путь), собственно...

Получить имя файла без расширения
Дана строка, содержащая полное имя файла, то есть имя диска, список каталогов (путь), собственно...

28
8940 / 4852 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
01.04.2013, 00:27 2
C#
1
System.IO.Path.GetFileNameWithoutExtension(fileName);
3
0 / 0 / 0
Регистрация: 04.03.2013
Сообщений: 14
01.04.2013, 09:12  [ТС] 3
Цитата Сообщение от ViterAlex Посмотреть сообщение
C#
1
System.IO.Path.GetFileNameWithoutExtension(fileName);
спасибо что откликнулись, все вроде бы верно но есть одно но(на форуме уже были такие ответы). в комбо боксе используется массив данных а GetFileNameWithoutExtension использовать если только в цикле. Отсюда и вопрос есть ли функция специальная для этого? (не могу поверить что в наше время до сих пор не сделали специальную функцию для вывода имен файлов в массиве)
0
0 / 0 / 0
Регистрация: 04.03.2013
Сообщений: 14
01.04.2013, 10:24  [ТС] 5
Спасибо, эти штуки я читал(гугль рулит) но суть так и осталась скрытой для меня. Как же получить список файлов в комбобоксе(массив) без пути и расширения, не прибегая к циклам. Если конечно такое возможно.
\\C:/myFile.ext -> myFile
0
Эксперт Java
4091 / 3825 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
01.04.2013, 11:43 6
Цитата Сообщение от chambeer Посмотреть сообщение
не прибегая к циклам
Чем вам не нравятся циклы?

Примитивная задача на две строки, а вы дольше выясняете как вам её делать...
0
0 / 0 / 0
Регистрация: 04.03.2013
Сообщений: 14
01.04.2013, 11:48  [ТС] 7
Цитата Сообщение от turbanoff Посмотреть сообщение
Чем вам не нравятся циклы?

Примитивная задача на две строки, а вы дольше выясняете как вам её делать...
прошу прощения, просто любопытство.
0
0 / 0 / 0
Регистрация: 04.03.2013
Сообщений: 14
03.04.2013, 16:21  [ТС] 8
вобщем то оставил так:

C#
1
2
3
4
5
        private void comboBox1_DropDown(object sender, EventArgs e)
        {
            comboBox1.Items.Clear();
            comboBox1.Items.AddRange(Directory.GetFiles(@".", "*.xml"));
        }
имена файлов выводятся как .\file.xml , для меня это не критично. если кто-то знающий все же заглянет в эту тему буду рад узнать как без цикла получить названия файлов без расширения и пути в виде string[]. всем спасибо!
0
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
03.04.2013, 17:59 9
Лучший ответ Сообщение было отмечено OwenGlendower как решение

Решение

Цитата Сообщение от chambeer Посмотреть сообщение
буду рад узнать как без цикла получить названия файлов без расширения и пути в виде string[]
Можно так попробовать:
C#
1
System.IO.Directory.GetFiles(@".", "*.xml").Select(x => System.IO.Path.GetFileNameWithoutExtension(x))
3
0 / 0 / 0
Регистрация: 04.03.2013
Сообщений: 14
04.04.2013, 11:27  [ТС] 10
Все замечательно работает вот так:
C#
1
2
3
4
5
        private void comboBox1_DropDown(object sender, EventArgs e)
        {
            comboBox1.Items.Clear();
            comboBox1.Items.AddRange(Directory.GetFiles(@".", "*.xml").Select(x => Path.GetFileNameWithoutExtension(x)).ToArray());
        }
все фанфары умному и просто замечательному форумчанину kodv
0
0 / 0 / 0
Регистрация: 19.04.2015
Сообщений: 5
19.04.2015, 02:39 11
Дмитрий (kodv), Благодарю! =)
0
589 / 307 / 17
Регистрация: 10.09.2021
Сообщений: 1,627
08.08.2023, 18:49 12
есть ещё API-функция PathStripPathW из shlwapi.dll
0
101 / 101 / 15
Регистрация: 23.05.2012
Сообщений: 260
09.08.2023, 22:00 13
Я думаю тебе надо вот так

C#
1
2
string s = "c:\\dfd\\dfdfd.dfd";
        string f=s.Split('\\')[s.Split('\\').Length-1];
Ну или более читабельно
C#
1
2
3
string s = "c:\\dfd\\dfdfd.dfd";
        string[] t=s.Split('\\');
        string fileName=t[t.Length-1];
0
589 / 307 / 17
Регистрация: 10.09.2021
Сообщений: 1,627
09.08.2023, 22:02 14
PathStripPathW мне вполне подойдёт)))
0
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,342
Записей в блоге: 1
09.08.2023, 23:03 15
HackerVlad, чем она лучше чем Path.GetFileName? И кстати ТСу требовалось и расширение убрать. То есть нам нужна Path.GetFileNameWithoutExtension, как уже 10 лет назад ответили.

Добавлено через 41 минуту
Цитата Сообщение от DPW Посмотреть сообщение
Я думаю тебе надо вот так
Плохая идея. Лучше использовать методы класса Path. Они более универсальные (поддерживают разные разделители - прямой и обратные слеши) и меньше памяти тратят.

Цитата Сообщение от DPW Посмотреть сообщение
Ну или более читабельно
Более важно что мы два раза массив не создаем. Это резко увеличивает траты памяти.
1
Эксперт .NET
1696 / 1325 / 316
Регистрация: 15.06.2012
Сообщений: 5,045
Записей в блоге: 3
09.08.2023, 23:40 16
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Плохая идея.
плюсую. Открываем метода GetFileName и видим прям комент, когда это вызовет проблемы

C#
1
2
// We don't want to cut off "C:\file.txt:stream" (i.e. should be "file.txt:stream")
// but we *do* want "C:Foo" => "Foo". This necessitates checking for the root.
Еще не учитывается обратный слеш. В общем, рекомендую не велосипедить.
2
589 / 307 / 17
Регистрация: 10.09.2021
Сообщений: 1,627
10.08.2023, 12:49 17
Цитата Сообщение от OwenGlendower Посмотреть сообщение
HackerVlad, чем она лучше чем Path.GetFileName?
Ничем ни лучше, за исключением того что работает для всех языков программирования (а ведь это плюс). Короче не все люди пишут на одном и том же языке. А вот API универсально для всех языков. Тут хоть 10 лет назад и обсуждалось, но никто не приложил API-функцию нужную. А я искал как раз API.

PathRemoveExtension из той же библиотеки shlwapi для отрезания расширения на конце вместе с точкой.

Добавлено через 1 минуту
Wolfdp, почему у вас нету рейтинга
0
Эксперт .NET
10563 / 6487 / 1506
Регистрация: 25.05.2015
Сообщений: 19,654
Записей в блоге: 14
10.08.2023, 13:16 18
HackerVlad, это тема по C# и в нем есть упомянутый подходящий метод.
Само наличие слеша впереди - ошибка программиста.
В 9-10 постах нормальное решение.
Сейчас c# кроссплатформенный и работает в том числе там, где winapi нет.

Добавлено через 1 минуту
HackerVlad, вот поэтому : https://www.cyberforum.ru/abou... st16981016
1
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,342
Записей в блоге: 1
10.08.2023, 13:27 19
Цитата Сообщение от HackerVlad Посмотреть сообщение
Ничем ни лучше, за исключением того что работает для всех языков программирования (а ведь это плюс).
Знания Windows API никому не помешают, но в рамках .NET это спорный плюс. Потому что есть родная альтернатива которой проще пользоваться чем Windows API.
C#
1
2
3
4
5
6
7
8
// Варианту с WindowsAPI требуется дополнительная обертка
static string GetFileNameWithoutExtension(string path)
{
    var sbPath = new StringBuilder(path);
    PathStripPath(sbPath);
    PathRemoveExtension(sbPath);
    return sbPath.ToString();
}
Плюс родная реализация меньше памяти расходует. Тем не менее, если вам так удобнее, то ради бога.
0
Wolfdp
10.08.2023, 14:58     Получить имя файла без полного пути
  #20

Не по теме:

Цитата Сообщение от HackerVlad Посмотреть сообщение
Wolfdp, почему у вас нету рейтинга
попросил у администрации его скрыть

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.08.2023, 14:58

Получить имя файла без расширения
Дана строка, содержащая полное имя файла, то есть имя диска, спи- сок каталогов (путь), ...

Выделить из полного пути к файлу его расширение (без предшествующей точки)
Дана строка, содержащая полное имя файла, то есть имя диска, список каталогов (путь), собственно...

Получить имя файла без полного пути
Доброго времени суток! Я пытаюсь в заголовке формы записать имя считываемого файла, но в него...

Получить имя файла, без полного пути
Please Help)))) Мне надо чтобы выбрав файл в CommonDialog имя выбранного файл появилось в Label1....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru