forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   Имя файла (http://forum.boolean.name/showthread.php?t=12268)

gforcer18 25.03.2010 21:04

Помогите написать алгоритм выяснения имени файла из полного пути.
Например есть:
Код:

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 в константе
:(

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

IGR 25.03.2010 21:11

Ответ: Имя файла
 
а на какую строку ругается ??

strcpy(wc,FileName);//Копирует символы wc[] в FileName[]
у тебя там как ??

gforcer18 25.03.2010 21:18

Ответ: Имя файла
 
ругается на цикл for, что-то там не так

jimon 25.03.2010 22:43

Ответ: Имя файла
 
Код:

for (a=len; rc[a] !="\"; a--)
надо писать так :
Код:

for (a=len; rc[a] !='\'; a--)

ABTOMAT 25.03.2010 23:03

Ответ: Имя файла
 
Ты же ж символы со строкой сравниваешь
Блин опередили

gforcer18 26.03.2010 08:34

Ответ: Имя файла
 
блин, ничего не выходит. Напишите кто алгоритм такой.
У меня проблема, что не получается из String преревести переменную в char
ПОМОГИТЕ:''((

Randomize 26.03.2010 08:58

Ответ: Имя файла
 
Код:

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


SBJoker 26.03.2010 10:29

Ответ: Имя файла
 
А исчо можно токенизировать строку по '\' и взять последний кусок как результат.

Knightmare 26.03.2010 15:14

Ответ: Имя файла
 
Для верного вырезания имени файла необходимо проверять оба слэша - и '\', и '/'.
В STL у строк есть метод find_last_of(), очень полезно для парсинга, ага.
Мэнэджэд С++ есть ересь, что там за строки - понятия не имею, но подозреваю что имеются аналогичные STL методы.

gforcer18 26.03.2010 16:07

Ответ: Имя файла
 
хочу всем сказать спасибо, что помогли преодолеть вопросы программирования.
Вот как я сделал выделение имени файла или папки после флеш-символа:
Код:

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-а в строке.
Спасибо:)

Knightmare 26.03.2010 16:10

Ответ: Имя файла
 
Цитата:

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


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot