表达式必须具有整数或未整合的枚举类型,并带有字符串向量

时间:2016-02-02 07:53:05

标签: c++ enums

所以我正在尝试制作一个程序,将所有类型的文件从我的下载文件夹移动到它们应该属于的文件夹。

我一直在研究这个问题,最后提出来了:

#include <iostream>
#include <fstream>
#include <string>
#include <Windows.h>
#include <vector>
#include <stdio.h>

using namespace std;

vector<string> GetFileNamesInDirectory(string directory) {

    vector<string> files;
    HANDLE hFind;
    WIN32_FIND_DATA data;

    hFind = FindFirstFile(directory.c_str(), &data);
    if (hFind != INVALID_HANDLE_VALUE) {
        do {
            files.push_back(data.cFileName);
        } while (FindNextFile(hFind, &data));
        FindClose(hFind);
    }
    return files;
}

int main() {

    string *paths = new string[2];
    string line;
    ifstream pathFile("paths.txt");
    int i = 0;
    vector<string> rsFiles;
    string currentFile;
    int moveCheck;

    if (pathFile.is_open()) {
        while (getline(pathFile, line)) {
            paths[i] = line.substr(line.find_first_of(" ")+1);
            i++;
        }
        pathFile.close();
    }
    else {
        cout << "Unable to open file" << endl;
        return 0;
    }

    rsFiles = GetFileNamesInDirectory(paths[0]+"*.psarc");

    for (int j = 0; j < rsFiles.size(); j++) {

        currentFile = rsFiles[j];

        moveCheck = rename(paths[0].c_str() + currentFile.c_str(), paths[1].c_str() + currentFile.c_str());

    }

    system("pause");
    return 0;
}

所以当我去重命名()中的文件时,我得到一个错误,'currentFile'说“表达式必须有整数或未整合的枚举类型”。我假设这是因为你不能索引我的方式,或者沿着这些方向的东西。

我是C ++的新手,但有其他编码经验,这对我来说是有意义的。

此外,我知道我已从其他来源获取代码,但我不打算将其出售或公开发布,仅供我自己和个人使用。

1 个答案:

答案 0 :(得分:3)

您需要将连接两个字符串的方式更改为:

moveCheck = rename((paths[0] + currentFile).c_str(), (paths[1] + currentFile).c_str());

c_str()正在将指针指向每个字符串中的字符缓冲区,因此添加两个指针没有意义。相反,您需要添加两个字符串,然后从连接字符串中获取数据缓冲区。

另一种写作方式,来自@Martin Bonner和@Nicky

std::string oldPath = paths[0] + currentFile; 
std::string newPath = paths[1] + currentFile; 
moveCheck = rename(oldPath.c_str(), newPath.c_str());