我不知道它是否相关,但我使用的是Windows 7和Microsoft Visual Studio 2010。
我想要做的就是询问用户是否有文件名,检查该名称的文件是否存在,如果存在,请询问他们不同的文件
我的尝试
Main.cpp的
std::cout << std::endl << "You must create a username" << std::endl;
std::cin >> username;
user.checkFile(username);
User.cpp
void User::checkFile(std::string &username)
{
std::ifstream fin (username + ".txt");
while (fin.good)
{
std::cout << "This username already exists, please choose another.";
std::cin >> username;
if (fin.bad)
{
break;
fin.close();
}
}
}
这可以正确识别该名称的文件是否存在,但即使我输入的名称不存在,它仍然告诉我它确实存在
答案 0 :(得分:1)
我会使用简单的C函数进行文件处理。
void User::checkFile(std::string &username)
{
std::string username2 = username + ".txt";
FILE * f = fopen(username2.c_str(), "r");
while (f != NULL)
{
fclose(f);
std::cout << "This username already exists, please choose another.";
std::cin >> username;
std::string username2 = username + ".txt";
f = fopen(username2.c_str(), "r");
}
}
这样,变量username
将在函数cal返回后保存有效名称,因为您通过引用传递它。
答案 1 :(得分:1)
int main(void) {
bool fileExists = true;
while (fileExists)
{
string fileName;
cout << "Enter file name: ";
cin >> fileName;
ifstream ifs(fileName.c_str());
fileExists = !ifs.good();
}
return 0;
}
答案 2 :(得分:1)
如果您仅限于只是 Windows,那么有一个API函数就是这样做的:PathFileExists
。
如果您想坚持使用标准库,可以执行以下操作:
string filename;
cin >> filename;
ifstream fin(filename);
if (fin.is_open())
{
// file opened successfully
}
else
{
// file did not open
}
答案 3 :(得分:1)
Main.cpp的
std::cout << std::endl << "You must create a username" << std::endl;
do
{
std::cin >> username;
if (user.checkFile(username))
break;
std::cout << "This username already exists, please choose another." << std::endl;
}
while (true);
User.cpp
bool User::checkFile(const std::string &username)
{
FILE *fin = fopen((username + ".txt").c_str(), "r");
if (fin)
{
fclose(fin);
return false;
}
return true;
}
答案 4 :(得分:0)
输入新字符串后,需要使用该名称重新打开文件:
std::cout << "This username already exists, please choose another.";
std::cin >> username;
fin.close();
fin.open(username);
此外,good
和bad
是必须使用调用运算符()
调用的函数。
答案 5 :(得分:-1)
我认为您需要使用c_str()
函数转换字符串。例如:
string a="df";
a.c_str(); // will return c string