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

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

30.12.2012, 20:21. Показов 3774. Ответов 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
Почетный модератор
 Аватар для Памирыч
23249 / 9161 / 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
Почетный модератор
 Аватар для Памирыч
23249 / 9161 / 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
Почетный модератор
 Аватар для Памирыч
23249 / 9161 / 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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru