Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将字符转换为字符串时反斜杠消失_C++_String_Char_Backslash - Fatal编程技术网

C++ 将字符转换为字符串时反斜杠消失

C++ 将字符转换为字符串时反斜杠消失,c++,string,char,backslash,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<<"[Expletiv

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

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

但每次出现故障(vector
文件
为空…)。有人知道我做错了什么吗?

放上双反斜杠,因为单反斜杠代表wildchar,所以要将反斜杠作为一个字符,它前面应该加上另一个反斜杠

谢谢大家的帮助,特别是感谢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;
}
std::vector getContent(TCHAR*dir,TCHAR*extension){
WIN32_FIND_DATA FindFileData;
处理高频风;
char-ch[260];
char-defChar;
memset(模式,0x00,最大路径);
_stprintf__s(模式、扩展、方向);
hFind=FindFirstFile(模式和FindFileData);
if(hFind==无效的句柄值)
{
printf(“FindFirstFile失败(%d)\n”,GetLastError());
//返回1;
} 
其他的
{
做
{
//忽略当前目录和父目录
如果(_tcscp(FindFileData.cFileName,TEXT(“.”)==0 | | ||_tcscp(FindFileData.cFileName,TEXT(“…”)==0)
继续;
if(FindFileData.dwFileAttributes和文件属性目录)
{
//忽略目录
}
其他的
{
//列出文件
files.resize(files.size()+1);
WideChartMultiByte(CP_ACP,0,FindFileData.cFileName,-1,ch,260,&defChar,NULL);
files[files.size()-1]=std::string(ch);
//_tprintf(文本(“%s\n”)、FindFileData.cFileName);
}
}
while(FindNextFile(hFind和FindFileData));
FindClose(hFind);
}
归还文件;
}
下面是如何调用此函数:

vector<string> ss;
TCHAR  *directory = TEXT("D:\\Music");
TCHAR  *ext = TEXT("%s\\*.mp3");
ss  = getContent(TCHAR *dir, TCHAR *extention)
向量ss;
TCHAR*目录=文本(“D:\\Music”);
TCHAR*ext=TEXT(“%s\\*.mp3”);
ss=getContent(TCHAR*dir,TCHAR*extension)

假设这是在某个windows框上。我想你不是“汤姆”吧?“汤姆”有没有可能让你读取他的用户目录?你是从控制台应用程序上运行的,对吗?它在子系统Windows应用程序中不起作用(也不会返回NULL,这是您所依赖的)。用户tom只是一个例子,实际上我需要获取D:\Music文件夹的内容,并且我对该文件夹有完全访问权限:D,但您是对的,我正在从控制台应用程序运行此功能。那么您对如何简单地获取文件夹内容有什么建议吗?我想如果您在while条件下丢失
feof(pipe)
(并移动
(fgets(buf,256,pipe)!=NULL),也会发生同样的错误
它可能属于的while条件?这意味着最后一行是正确的字符串。之后出现的任何问题都有不同的原因。
vector<string> ss;
TCHAR  *directory = TEXT("D:\\Music");
TCHAR  *ext = TEXT("%s\\*.mp3");
ss  = getContent(TCHAR *dir, TCHAR *extention)