Как заменить слэш?
От: khatsko  
Дата: 10.07.06 14:32
Оценка: :)
Подскажите как заменить слэш в такой конструкции:

CString path_string = folder1_string + "\" + folder2_string;

Компилятор (MSVC 2003) ругается:

c:\Projects\file.cpp(262): error C2001: newline in constant


И так тоже:

CString path_string = folder1_string + '\' + folder2_string;


Думал вот так должно работать:
CString path_string = folder1_string + "\\" + folder2_string;
но вместо одного слэша, там прибавляется 2 слэша.

Скажите как прибавить слэш?
Re: Как заменить слэш?
От: Аноним  
Дата: 10.07.06 14:35
Оценка:
Здравствуйте, khatsko, Вы писали:

K>Думал вот так должно работать:

K>CString path_string = folder1_string + "\\" + folder2_string;
K>но вместо одного слэша, там прибавляется 2 слэша.

Все правильно, просто у тебя скорее всего посл символ в folder1_string (или первый в folder2_string) тот самый слеш
Re: Как заменить слэш?
От: igna Россия  
Дата: 10.07.06 14:46
Оценка:
Здравствуйте, khatsko, Вы писали:

K>CString path_string = folder1_string + "\\" + folder2_string;

K>но вместо одного слэша, там прибавляется 2 слэша.

В "\\" только один слэш, второй наверное в конце folder1_string или в начале folder2_string.
Re: Как заменить слэш?
От: Project_Engineer Украина  
Дата: 10.07.06 15:13
Оценка:
Здравствуйте, khatsko, Вы писали:

K>Думал вот так должно работать:

K>CString path_string = folder1_string + "\\" + folder2_string;
K>но вместо одного слэша, там прибавляется 2 слэша.
K>Скажите как прибавить слэш?

CString path_string;
path_string.Format("%s\\%s", folder1_string, folder2_string);


Или

CString folder1_string, folder2_string;
CString path_string = folder1_string + CString("\\") + folder2_string;
Re: Как заменить слэш?
От: Project_Engineer Украина  
Дата: 10.07.06 15:15
Оценка:
Здравствуйте, khatsko, Вы писали:

K>Думал вот так должно работать:

K>CString path_string = folder1_string + "\\" + folder2_string;
K>но вместо одного слэша, там прибавляется 2 слэша.

K>Скажите как прибавить слэш?


Еще так можно:

CString path_string(folder1_string);
path_string += "\\";
path_string += folder2_string;


Re[2]: Как заменить слэш?
От: Project_Engineer Украина  
Дата: 10.07.06 15:19
Оценка:
Здравствуйте, khatsko, Вы писали:

K>>Думал вот так должно работать:

K>>CString path_string = folder1_string + "\\" + folder2_string;
K>>но вместо одного слэша, там прибавляется 2 слэша.
K>>Скажите как прибавить слэш?

Или так:

CString folder1_string, folder2_string;
CString path_string(folder1_string+CString("\\")+folder2_string);
Re: Как заменить слэш?
От: Кодт Россия  
Дата: 11.07.06 06:21
Оценка: +1
Здравствуйте, khatsko, Вы писали:

K>Скажите как прибавить слэш?


Общая идея:
CString ConcatPaths(const CString& s1, const CString& s2)
{
    TCHAR const cSlash = _T('\\');
    
    if(s1.IsEmpty() || s2.IsEmpty())
        return s1+s2;
    else if(s1[s1.GetLength()-1]==cSlash && s2[0]==cSlash) // есть и концевой, и начальный слэш, нужно оставить только один
        return s1+s2.Mid(1);
    else if(s1[s1.GetLength()-1]==cSlash || s2[0]==cSlash) // есть единственный слэш
        return s1+s2;
    else // нет слэшей, нужно вставить
        return s1+cSlash+s2;
}

Способы конкатенации (+, +=, Format) могут варьироваться — в угоду выразительности и производительности.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Перекуём баги на фичи!
Re: Как заменить слэш?
От: Шахтер Интернет  
Дата: 11.07.06 06:44
Оценка:
Здравствуйте, khatsko, Вы писали:

K>Подскажите как заменить слэш в такой конструкции:


K>CString path_string = folder1_string + "\" + folder2_string;


K>Компилятор (MSVC 2003) ругается:


K>c:\Projects\file.cpp(262): error C2001: newline in constant


Правильно, потому что у тебя получилась не закрытая строка -- вторые кавычки вместо того, чтобы ограничить строку были в неё добавлены..

K>И так тоже:


K>CString path_string = folder1_string + '\' + folder2_string;


То же самое.

K>Думал вот так должно работать:

K>CString path_string = folder1_string + "\\" + folder2_string;
K>но вместо одного слэша, там прибавляется 2 слэша.

А это ты врёшь. Скорее всего, у тебя первый путь уже заканчивался на \.
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re: Как заменить слэш?
От: Eugene Kilachkoff Россия  
Дата: 11.07.06 08:22
Оценка: 1 (1)
Здравствуйте, khatsko, Вы писали:

K>Думал вот так должно работать:

K>CString path_string = folder1_string + "\\" + folder2_string;
K>но вместо одного слэша, там прибавляется 2 слэша.
Это дебаггер в виде двух слэшей выводит
Re: Как заменить слэш?
От: runtime2  
Дата: 17.07.06 19:46
Оценка:
Здравствуйте, khatsko, Вы писали:

K>Думал вот так должно работать:

K>CString path_string = folder1_string + "\\" + folder2_string;
K>но вместо одного слэша, там прибавляется 2 слэша.

K>Скажите как прибавить слэш?


Что бы не было этих двойных слэшей я такую функцию использую:

//складывает два пути в один
std::string path_append(const std::string& p1, const std::string& p2)
{
    const std::string PATH_DELIM("\\");
    const std:: string doub = PATH_DELIM + PATH_DELIM;    
    std::string rez = p1 + PATH_DELIM + p2;    
    std::size_t pos = 0;
    //цикл для удаления \\\ oops триграф
    while( (pos = rez.find(doub)) != std::string::npos )    
        rez.erase(pos, 1);
    return rez;
}


Пример использования:

        const std::string table_file_name = "dtable.txt";
        //загружаем таблицу для перекодирования
        decoder.load_table(path_append(get_app_path(), table_file_name));
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Как заменить слэш?
От: Centaur Россия  
Дата: 17.07.06 19:59
Оценка: 1 (1)
Здравствуйте, runtime2, Вы писали:

R>Что бы не было этих двойных слэшей я такую функцию использую:


R>
R>//складывает два пути в один
R>std::string path_append(const std::string& p1, const std::string& p2)
R>{
R>    const std::string PATH_DELIM("\\");
R>    const std:: string doub = PATH_DELIM + PATH_DELIM;    
R>    std::string rez = p1 + PATH_DELIM + p2;    
R>    std::size_t pos = 0;
R>    //цикл для удаления \\\ oops триграф
R>    while( (pos = rez.find(doub)) != std::string::npos )    
R>        rez.erase(pos, 1);
R>    return rez;
R>}
R>


Так нельзя делать, потому что это сразу убивает поддержку UNC-путей.

std::cout << path_append("\\\\server\\share", "path\\filename") << std::endl;
Re[3]: Как заменить слэш?
От: runtime2  
Дата: 18.07.06 18:09
Оценка:
Здравствуйте, Centaur, Вы писали:

C>Так нельзя делать, потому что это сразу убивает поддержку UNC-путей.


C>
std::cout << path_append("\\\\server\\share", "path\\filename") << std::endl;

Спасибо Я бы до такого не додумался
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.