Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > C++

Ответ
 
Опции темы
Старый 25.03.2010, 21:04   #1
gforcer18
Нуждающийся
 
Аватар для gforcer18
 
Регистрация: 06.02.2010
Адрес: Ижевск, Удмуртия, РФ
Сообщений: 78
Написано 19 полезных сообщений
(для 54 пользователей)
Сообщение

Помогите написать алгоритм выяснения имени файла из полного пути.
Например есть:
String^ Path="C:\\MyFolder\\MyFile.txt";
String^ FileName=GetFileName(Path);
//Функция GetFileName
String^ GetFileName(String^ Path)
{
String^ FileName="";



Return(FileName);
}
Сначала я думал использовать:
int a;
int len=100;
char rc[100];
char wc[100];
int k;
for (a=len; rc[a] !="\"; a--)
{
 if (rc[a] !="\")
 {
 wc[k]=rc[a];
 k++;
 }
}
strcpy(wc,FileName)//Копирует символы wc[] в FileName[]
Но компилятор ругается:
error C2001: newline в константе


или может кто знает способ попроще выяснить имя файла.
__________________
Активный, общительный, адекватный, вежливый, терпеливый, немножко ленивый, креативный оригинал

Последний раз редактировалось jimon, 25.03.2010 в 22:41.
(Offline)
 
Ответить с цитированием
Старый 25.03.2010, 21:11   #2
IGR
Blitz's Shame !!
 
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений
(для 2,013 пользователей)
Ответ: Имя файла

а на какую строку ругается ??

strcpy(wc,FileName);//Копирует символы wc[] в FileName[]
у тебя там как ??
(Offline)
 
Ответить с цитированием
Старый 25.03.2010, 21:18   #3
gforcer18
Нуждающийся
 
Аватар для gforcer18
 
Регистрация: 06.02.2010
Адрес: Ижевск, Удмуртия, РФ
Сообщений: 78
Написано 19 полезных сообщений
(для 54 пользователей)
Ответ: Имя файла

ругается на цикл for, что-то там не так
__________________
Активный, общительный, адекватный, вежливый, терпеливый, немножко ленивый, креативный оригинал
(Offline)
 
Ответить с цитированием
Старый 25.03.2010, 22:43   #4
jimon
 
Сообщений: n/a
Ответ: Имя файла

for (a=len; rc[a] !="\"; a--)
надо писать так :
for (a=len; rc[a] !='\'; a--)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
gforcer18 (26.03.2010)
Старый 25.03.2010, 23:03   #5
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: Имя файла

Ты же ж символы со строкой сравниваешь
Блин опередили
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием
Старый 26.03.2010, 08:34   #6
gforcer18
Нуждающийся
 
Аватар для gforcer18
 
Регистрация: 06.02.2010
Адрес: Ижевск, Удмуртия, РФ
Сообщений: 78
Написано 19 полезных сообщений
(для 54 пользователей)
Ответ: Имя файла

блин, ничего не выходит. Напишите кто алгоритм такой.
У меня проблема, что не получается из String преревести переменную в char
ПОМОГИТЕ
__________________
Активный, общительный, адекватный, вежливый, терпеливый, немножко ленивый, креативный оригинал
(Offline)
 
Ответить с цитированием
Старый 26.03.2010, 08:58   #7
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений
(для 6,852 пользователей)
Ответ: Имя файла

char* StringToChar(String^ str)
    {
        char *ch;
        pin_ptr<const wchar_t> wch = PtrToStringChars(str);
        size_t convertedChars = 0; 
        size_t  sizeInBytes = ((str->Length + 1) * 2); 
        ch = (char *)malloc(sizeInBytes); 
        wcstombs_s(&convertedChars, ch, sizeInBytes, wch, sizeInBytes);
        return ch;
    }
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
gforcer18 (26.03.2010)
Старый 26.03.2010, 10:29   #8
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: Имя файла

А исчо можно токенизировать строку по '\' и взять последний кусок как результат.
__________________
(Offline)
 
Ответить с цитированием
Старый 26.03.2010, 15:14   #9
Knightmare
Дэвелопер
 
Регистрация: 14.02.2007
Сообщений: 1,471
Написано 824 полезных сообщений
(для 2,920 пользователей)
Ответ: Имя файла

Для верного вырезания имени файла необходимо проверять оба слэша - и '\', и '/'.
В STL у строк есть метод find_last_of(), очень полезно для парсинга, ага.
Мэнэджэд С++ есть ересь, что там за строки - понятия не имею, но подозреваю что имеются аналогичные STL методы.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
gforcer18 (26.03.2010)
Старый 26.03.2010, 16:07   #10
gforcer18
Нуждающийся
 
Аватар для gforcer18
 
Регистрация: 06.02.2010
Адрес: Ижевск, Удмуртия, РФ
Сообщений: 78
Написано 19 полезных сообщений
(для 54 пользователей)
Ответ: Имя файла

хочу всем сказать спасибо, что помогли преодолеть вопросы программирования.
Вот как я сделал выделение имени файла или папки после флеш-символа:
String^ GetFileName(String^ strFullPath)
{
String^ strResult="Result";
int index=strFullPath->LastIndexOf('\\');
strResult=strFullPath->Remove(0,index+1);
return(strResult);
}
Особенность .Net является проблема слэш-символов, например \\ эквивалент \. String^ ->Remove(start,end) - удаляет число символов начиная с опр. индекса.
LastIndexOf('\\') - возвращает последний индекс входа символа Unicod-а в строке.
Спасибо
__________________
Активный, общительный, адекватный, вежливый, терпеливый, немножко ленивый, креативный оригинал
(Offline)
 
Ответить с цитированием
Старый 26.03.2010, 16:10   #11
Knightmare
Дэвелопер
 
Регистрация: 14.02.2007
Сообщений: 1,471
Написано 824 полезных сообщений
(для 2,920 пользователей)
Ответ: Имя файла

Особенность .Net является проблема слэш-символов, например \\ эквивалент \.
Escape последовательности, они везде (\t, \r, \n, \\, тысячи их). Ну кроме блитза пожалуй.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Dream (26.03.2010)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 06:06.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com