将char转换为字符串时,反斜杠会消失

时间:2015-01-07 11:42:06

标签: c++ string char backslash

我有一个返回文件夹内容的函数:

void getDir(const char* d, vector<string> & f)
{
    FILE* pipe =  NULL;
    string pCmd = "dir /B /S " + string(d);
    char buf[256];
    if( NULL == (pipe = _popen(pCmd.c_str(),"rt")))
    {
        cout<<"[Expletive deleted]"<<endl;
        return;
    }
    while (!feof(pipe))
    {
        if(fgets(buf,256,pipe) != NULL)
        {
            f.push_back(string(buf));
        }
    }
    _pclose(pipe);
}

问题是字符串pCMD应该等于"dir /B /S c:\Users\Tom",但在将char转换为字符串后,它会删除像"dir /B /S c:UsersTom"这样的反斜杠。我试过用这些方法调用函数:

getDir("c:\Users\Tom", files);
getDir("c:/Users/Tom", files);
getDir("c:\\Users\Tom", files);
getDir("c:\\Users\\Tom", files);

但是每次我失败时(向量files都是空的......)。有人知道我做错了吗?

2 个答案:

答案 0 :(得分:2)

设置双反斜杠,因为单反斜杠代表wildchar,因此反斜杠作为一个字符,它应该以另一个反斜杠开头

答案 1 :(得分:0)

谢谢大家的帮助,特别感谢Debasish Jana,你是对的。为了得到反斜杠作为一个字母,我先用另一个反斜杠。但我找到了另一种使用FindFirstFile()FindNextFile()获取文件夹内容的方法,我想与之分享:

std::vector<std::string> getContent(TCHAR *dir, TCHAR *extention){

    WIN32_FIND_DATA FindFileData;
    HANDLE hFind;
    char ch[260];
    char defChar;
    memset(patter, 0x00, MAX_PATH);
    _stprintf_s(patter, extention, dir);
    hFind = FindFirstFile(patter, &FindFileData);
    if (hFind == INVALID_HANDLE_VALUE) 
    {
        printf ("FindFirstFile failed (%d)\n", GetLastError());
        //return 1;
    } 
    else 
    {
        do
        {
            //ignore current and parent directories
            if(_tcscmp(FindFileData.cFileName, TEXT("."))==0 || _tcscmp(FindFileData.cFileName, TEXT(".."))==0)
                continue;

            if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
            {
                //ignore directories
            }
            else
            {
                //list the Files
                files.resize(files.size()+1);
                WideCharToMultiByte(CP_ACP,0,FindFileData.cFileName,-1, ch,260,&defChar, NULL);
                files[files.size()-1] = std::string(ch);
                //_tprintf (TEXT("%s\n"), FindFileData.cFileName);
            }
        }
        while (FindNextFile(hFind, &FindFileData));
        FindClose(hFind);
    }
    return files;
}

以下是调用此函数的方法:

vector<string> ss;
TCHAR  *directory = TEXT("D:\\Music");
TCHAR  *ext = TEXT("%s\\*.mp3");
ss  = getContent(TCHAR *dir, TCHAR *extention)