Форум программистов, компьютерный форум, киберфорум
C++/CLI Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200

Как получить имя директории по заданному пути

30.12.2012, 20:21. Показов 3832. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Функция получает String^ str1 = "D:\\Folder1\\Folder2";
Надо вернуть String^ str2 = "Folder2";

Подскажите пожалуйста как сделать эту ерунду.

C++
1
2
3
4
5
6
7
8
9
String^ func(String^ str1)
{
  int n = str1->Length-1;
    for(int i = n; i > 0; i--)
    if(str1[i] == '\\')
        break;
  // не понимаю как вложить str2 = str1[от i до n] ?
  return str2;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.12.2012, 20:21
Ответы с готовыми решениями:

Разделение полного пути к файлу на диск, директории, имя и расширение
Написать функцию pathsplit( char *path, char *split) для расщепления полного пути к файлу на диск, директорий, имя и расширение, которые...

Как получить имя загружаемого файла без пути к нему
Здравствуйте! Данные из файла получаю следующим образом. Вставка-> Данные -> Ввод из файла. Как получить в переменную filename имя файла...

Получить имя первого файла в директории?
В директории имеется n-количество вложенных директорий, в каждой директории также имеется n-количество файлов. Требуется получить из каждой...

29
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
30.12.2012, 20:59
tur9, Вы собрались резать строку, чтобы получить имя папки?

В .NET есть возможность работать с путями.
Попробуйте использовать
C++
1
IO::Path::GetDirectoryName("Путь");
0
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
30.12.2012, 21:47  [ТС]
Памирыч, спасибо за отклик
C++
1
String^ temp = IO::Path::GetDirectoryName("D:\\Folder1\\Folder2");
возвращает "D:\\Folder1", а мне надо Folder2
Вообще как из данного стринга выдрать кусок?
Скажем дан String^ str1 = "abcde"; и два числа 1 и 3 и надо получить String^ str2 = "bcd"; Как это сделать?
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
30.12.2012, 21:55
tur9, верно, напутал.
Попробуйте так:
C++
1
String^ temp = IO::Path::GetFileName("D:\\Folder1\\Folder2");
А по второму вопросу попробуйте:
C++
1
temp->Substring(2, 4);
Где 2 - начальный символ (позиция), а 4 - длина строки
1
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
30.12.2012, 22:13  [ТС]
Памирыч, спасибо! Ведь целый день у меня на это ушел! Кошмар! Теперь только могу отдохнуть.
А если в Folfer2 будут еще фолдеры или файлы? А нельзя ли сразу получить весь список фолдеров и файлов по данному пути?
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
30.12.2012, 22:36
tur9, Получить список всех подкаталогов в заданном можно так:
Объявляем строковый массив
Присваиваем ему следующее:
C++
1
IO::Directory::GetDirectories("Путь", "*", System::IO::SearchOption::AllDirectories);
Так будут получены все каталоги любой вложенности.
Если нужно получить только папки в одном конкретном каталоге, не пишите третий параметр.
2
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
31.12.2012, 19:13  [ТС]
Памирыч, еще проблема есть.
В main есть две функции f1 и f2 которые возвращают в main одну и ту же структуру s.
Декларации функций f1 и f2 и структуры в declr.h. Функция f1 определена в файле func1.cpp, функция f2 определена в файле func2.cpp.
Итак структура s появляется в трех файлах: main, func1, func2, а определена она в файле declr.h

Делаю #include declr.h в трех файлах main, func1, func2. Это вызывает ошибку компиляции, т.к. структура определена несколько раз. Где то я читал, но не могу найти, про #ifdef - что то такое чтобы избежать многократного декларирования.
Подскажите пожалуйста что это за #ifdef, какой там синтакс.


Время близится к ночи. С Новым Годом, Вас, Памирыч!
Вот два маленьких подарочка
https://www.youtube.com/watch?... vb53mS5qHg
https://www.youtube.com/watch?v=Fiig_Ag1Ass
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
31.12.2012, 22:17
Ура!!! Всех с Новым Годом!!!
Цитата Сообщение от tur9 Посмотреть сообщение
но не могу найти, про #ifdef
C++
1
2
3
4
#ifndef 
#define
// Header code
#endif//
можно в студии заменить на #pragma once

Цитата Сообщение от tur9 Посмотреть сообщение
Функция f1 определена в файле func1.cpp, функция f2 определена в файле func2.cpp.
Функции должны быть полем класса
А этот класс подключать в Form1.h
C++
1
2
#pragma once
#include "MyClass.h"
Ошибка при компиляции "Обнаружен многократно определенный символ - один или более"


также структуру подключить в Form1.h

C++
1
2
3
#pragma once
#include "MyClass.h"
#include "MyStruct.h"
и в header-E классa с функциями MyClass.h
C++
1
2
#pragma once
#include "MyStruct.h"
//////////////////////////////////////////////////////////
MyStruct.h
C++
1
2
3
4
5
6
7
8
9
#pragma once
 ref struct MyStruct
{
public:
    System::String^ GetStructString()
    {
        return ( "Hello World !!! (from struct)" );
    }
};
MyClass.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
#pragma once
#include "MyStruct.h"
ref class MyClass
{
private:   MyStruct^ mstruct;
public:
    MyClass::MyClass(void);
 
     System::String^ Method1();
     System::String^ Method2();
 
};
MyClass.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "stdafx.h"
#include "MyClass.h"
 
MyClass::MyClass(void)
{
    mstruct = gcnew MyStruct();
}
 
 System::String^ MyClass::Method1()
    {
       return ( " from Method1 : " +  mstruct->GetStructString());
    }
 
 System::String^ MyClass::Method2()
    {
       return ( " from Method2 : " +  mstruct->GetStructString());
    }
Form1.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#pragma once
#include "MyClass.h"
#include "MyStruct.h"
 
................................
 
.................................
private: MyStruct ^ formstruct;
private: MyClass ^ formclass;
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)
 
{
    formstruct = gcnew MyStruct();
    formclass  = gcnew MyClass();
 
    textBox1->Text = (L"1 String " + formstruct->GetStructString() +  "\r\n" + L"2 String " + formclass->Method1() + "\r\n" + L"3 String " + formclass->Method2());
}
1
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
01.01.2013, 16:10  [ТС]
MrCold, спасибо! Правда я еще не разобрался до конца

С Новым Годом!

Человеческим возможностям нет предела... http://www.youtube.com/embed/cibU0-SzsRU
Зал плакал http://www.youtube.com/watch?v... re=related

Чуть позднее опишу свою мечту, как я бы хотел программировать. Также как в матлабе. Модель поздней опишу.

Добавлено через 17 часов 35 минут
Предварительно два простых вопроса
Создаю стандартный пустой WF проект. Для удобства охвата его целиком вот он в картинках


В mystruct1.cpp строчки 12 и 13 можно закомментировать? У меня вин7 64.

В Form1.h что написано в строке 15? Что создается ссылочный паблик класс Form1 и что этот класс унаследован от класса Form, который унаследован по цепочке от System?
1
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
01.01.2013, 16:22
Цитата Сообщение от tur9 Посмотреть сообщение
В mystruct1.cpp строчки 12 и 13 можно закомментировать? У меня вин7 64.
mystruct1.cpp не надо трогать , файл генерируется студией не нужно его изменять

Цитата Сообщение от tur9 Посмотреть сообщение
В Form1.h что написано в строке 15? Что создается ссылочный паблик класс Form1 и что этот класс унаследован от класса Form, который унаследован по цепочке от System?
Ну, да .
0
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
01.01.2013, 16:34  [ТС]
Вот Form1.h слева пустой и справа с добавленной кнопкой

К проекту добавил файл mystartfunc.cpp и вписал вызов этой функции в botton1_Click, строчка 82

Компиляция не проходит, что то не добавил в mystartfunc.cpp. Что?

Дальше я наконец то задам свой основной вопрос о том как программировать.
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
01.01.2013, 17:15
Цитата Сообщение от tur9 Посмотреть сообщение
Что?
Ответ уже былОшибка при компиляции "Обнаружен многократно определенный символ - один или более"
1
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
01.01.2013, 19:26  [ТС]
Исправил

и

так ошибок нет

Кажется я начал понимать ответ на тот основной вопрос, который пока еще не задал, сказано же было: поля, поля..
функции должны быть полями...


Сейчас все-таки сформулирую вопрос и отвечу на него
0
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
01.01.2013, 19:57  [ТС]
Вот как я программирую на матлабе

Это основная, запускающая функция, хотя основные события происходят не в ней, но это не важно сейчас.
Строчки 32-36 зовут библиотеки и заполняют глобальные указатели на них. Например mt = matrixfuncs; mt - глобальный указатель на библиотеку matrixfuncs. Вот она

Первая сверху функция это фактически декларации функций библиотеки. Вот так я могу позвать любую функцию из любого места программы [r c maxlevel] = mt.maxmat(G); для этого только нужно объявить глобальную переменную mt. Возвращают функции любые структуры или их набор, причем эти структуры не надо объявлять заранее, просто надо их знать чтобы с ними работать.
Итак есть группы функций, объединенных тематикой, часто целевой тематикой и какие то наборы структур, которые они возвращают. Эти функции могут звать функции из той же самой библиотеки так и из других библиотек. В конечном счете они возвращают структуры в основной процесс.

Такая техника удобна, я уже привык к ней. Хотелось бы ее воспроизвести и в С++. Но, объединять эти группы функций в классы выглядит нелепо с т. зр. объектности, т.к. они не образуют никакого мыслимого объекта. И тем не менее если эти функции сделать паблик полями классов даже с теми же именами, напр класс matrixfuncs, то тогда можно к ним обращаться из основной программы. Можно даже через typedef заменить их имена matrixfuncs на mt например и обращаться к ним так: mt::maxmat(G); правда пока неясно что делать с возвращаемыми структурами, тоже наверное объявлять их паблик в этих классах? Но тогда придется их объявлять и в основной программе как то...

 Комментарий модератора 
Картинки и файлы загружайте на форум, во избежание их удаления или потери на сторонних ресурсах
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
01.01.2013, 23:56
tur9,Может, чем поможет, Вот готовые Explorer-Ы .

http://msdn.microsoft.com/en-u... 71645.aspx

http://www.codeproject.com/Art... lorer-In-C
0
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
02.01.2013, 12:10  [ТС]
MrCold, спасибо. Вот здесь http://vbzero.narod.ru/chapter1/page_6.htm у DirLitBox-a папочки раскрывающиеся при нажатии. Есть ли возможность сделать подобное на С++ ? Может в ListBox-e просто надо какие то свойства выставить? Вряд ли они урезали функциональность старого объекта.
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
02.01.2013, 12:32
Похоже требуется OpenFileDialog и SafeFileDialog .. не уверен
0
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
02.01.2013, 12:45  [ТС]
после выбора файла и нажатия ОК эти окна пропадают, а я хочу чтобы они продолжали висеть, чтобы файлы, их группы всегда были видны
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
02.01.2013, 14:59
Если нужен
Цитата Сообщение от tur9 Посмотреть сообщение
DirLitBox
Правой клавишей мыши по панели элементов ->Выбрать элементы... ->Находим DirLitBox -> Ставим галочку.Закрываем-> Перетягиваем DirLitBox на форму
Миниатюры
Как получить имя директории по заданному пути   Как получить имя директории по заданному пути   Как получить имя директории по заданному пути  

1
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
02.01.2013, 16:18  [ТС]
MrCold, супер! Сбылась мечта... ассоциации известны

Добавлено через 6 минут
Но у меня на 64 битах наверное не заработает
http://msdn.microsoft.com/ru-r... .100).aspx

classes are obsolete and supported within 32 bit processes only
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.01.2013, 16:18
Помогаю со студенческими работами здесь

Получить имя директории текущего файла
Есть способ быстрее этого ?: $this= explode(DIRECTORY_SEPARATOR, __DIR__); $this = end($modname);

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

C пути получить имя файла
Всем здрасте, у меня есть путь точнее много путей к каждому файлу в цыкле, выгледят так :\ ...

Получить имя файла из пути
Господа, помогите - совсем голову сломал. Нкидаю на Лист список файлов для дальнейшего использования. Private Sub...

Получить имя папки из пути (FolderBrowserDialog)
Здравствуйте! Есть вот такой вот код: Me.FolderBrowserDialog.SelectedPath Мне из него нужно получить только имя выбранной...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru