所以我正在尝试制作一个程序,将所有类型的文件从我的下载文件夹移动到它们应该属于的文件夹。
我一直在研究这个问题,最后提出来了:
#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 ++的新手,但有其他编码经验,这对我来说是有意义的。
此外,我知道我已从其他来源获取代码,但我不打算将其出售或公开发布,仅供我自己和个人使用。
答案 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());