C ++:从多个文件中读取名称中带有空格的文件

时间:2017-01-04 22:32:11

标签: c++

这个问题的关键是,我在Xcode上编程。我写了一个函数,将给定数量的文本文件读入我的传感器向量:要获取文本文件Paths,我还写了一个函数,它给出了包含其路径的文件名并将它们存储在列表中。文本文件包含由选项卡分隔的数据,稍后将存储在excel中。问题是它们在名称中包含空格,而Mac在文件名中存在空格问题。我试图用“\”替换空格。当我回显一个带有空格的文件时,这就是终端用空格做的事情。我无法打开要从中读取的文件。感谢您的帮助。

路径功能:

void get_filelist(list<string>& list_in)
{
string full_path;
DIR *dir;
struct dirent *ent;

if((dir = opendir (dir_target.c_str()))!=NULL)
{
while((ent = readdir (dir)) != NULL)
{
    if(strstr(ent->d_name, ".txt") && !strstr(ent->d_name, "Summary"))
    {
        full_path = dir_target;
        full_path = full_path + ent->d_name;
        list_in.push_back(full_path);
    }
}
closedir(dir);
}
else{
printf("could not open directory");
perror("");
}
}

现在这里是写入我的3D矢量的函数

void fill_vector(list<string> list_in, data_vec& sensors)    
{
ifstream myfile;
size_t found;
for(list<string>::iterator it = list_in.begin(); it!= list_in.end(); it++)
{
string tab = "";
vector<vector<string> > temp_matrix;
cout << *it << endl;
myfile.open(*it);
if(myfile.is_open())
{
    vector<string> temp_row;
    while(myfile.is_open())
    {
        getline(myfile, tab, '\t');
        found = tab.find('\n');
        if(found == string::npos) temp_row.push_back(tab);
        else{
            temp_row.push_back(tab.substr(0, found));
            temp_matrix.push_back(temp_row);
            temp_row.clear();
            temp_row.push_back(tab.substr(found+1));
        }
    }
    myfile.close();
}
else cout << "unable to open file" ;
sensors.push_back(temp_matrix);
}
}

1 个答案:

答案 0 :(得分:0)

不要使用背面;灰烬表示文件名中的空格,否则你会陷入更糟糕的混乱状态。反斜杠是MS DOS上的目录分隔符。

如果

debounce

    fopen("path/my file.txt", "w");

两者都按预期工作(创建一个名称中有空格并打开它的文件)你真的没有问题。系统的其余部分存在问题,但如果您的名称中必须包含空格的文件,则可以读取和写入。

当然,尽快转换为连字符,下划线或简单连接,文件名中的空格会产生无穷无尽的问题。

功能

    fopen("path/my filetxt", "r");

很容易写。