C ++检查文件是否存在,如果是,则更改输出

时间:2013-12-10 20:51:56

标签: c++ file

我不知道它是否相关,但我使用的是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();
        }
    }
}

这可以正确识别该名称的文件是否存在,但即使我输入的名称不存在,它仍然告诉我它确实存在

6 个答案:

答案 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);

此外,goodbad是必须使用调用运算符()调用的函数。

答案 5 :(得分:-1)

我认为您需要使用c_str()函数转换字符串。例如:

string a="df";
a.c_str(); // will return c string