【问题标题】:How do I pass in a file name when creating them in C++?在 C++ 中创建文件时如何传递文件名?
【发布时间】:2022-01-21 15:32:13
【问题描述】:

我是 C++ 新手,我正在尝试制作一个简单的登录系统。我目前正在注册一个新用户,我想为该用户创建一个目录,然后我可以稍后保存他们的信息。我可以创建一个名为“用户”的目录,但我想传递一个参数而不是用户,但无论如何我都找不到这样做。有什么建议吗?

#include <string>
#include <iostream>
#include <array>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <bits/stdc++.h>

#include "User.h"

User::User()
{
        //default values
    user_name = "user";
    password = "12345";
}

void User::CreateNewUser()
{
    PromptForNewUserName();
    MakeNewUserDir();
    
}

void User::SetUserName(std::string new_user_name)
{
    user_name = new_user_name;
}

void User::SetPassword(std::string new_password)
{
    password = new_password;
}

std::string User::GetName()
{
    return user_name;
}
    
void User::PromptForNewUserName()
{
    bool is_new_name = false;
    std::string temp_user_name = "user";
    do
    {
        std::cout << "Enter your name: ";
        std::cin >> temp_user_name;
        if(GetName() != temp_user_name)
        {
            SetUserName(temp_user_name);
            is_new_name = true;
        }else {std::cout << "That user name is already in use." << std::endl; is_new_name = false;}
    }while(!is_new_name);
}

void User::PromptForNewPassword()
{
    
}

void User::PasswordReset()
{
    
}

void User::MakeNewUserDir()
{
    if(!GetName().empty())
    {
        int check;
        int name_length = GetName().length();
        char name_array[name_length + 1];
            // copies get name in to char array since mkdir takes in a char not a string
        strcpy(name_array, GetName().c_str());
            // mkdir returns an int, so we can assign it to check
        check = mkdir("C:/Users/3192833/Documents/MobaXterm/Lee/LinuxCheater/User", 0777);
        
            // check if the directory is created or not
        if(!check)
        {
            std::cout << std::endl;
        
            const char* name_array_ptr = name_array;
            rename("User", name_array_ptr);
            std::cout << "\nAn account has been created for " << GetName() << std::endl;
        }else{
            printf("Unable to create account\n");
            exit(1);
        }
        
    }
}

【问题讨论】:

  • 这并没有解决问题,但是在User::PromptForNewUserName() 中使用is_new_name 令人困惑,而且没有必要。删除它,并将is_new_name = true; 替换为return;。并将循环更改为do ... while (true);
  • 旁注:includes 和&lt;bits/stdc++.h&gt; 的墙表明你不知道&lt;bits/stdc++.h&gt; 做了什么。 Here's some reading on that 以及为什么不应该直接包含它。

标签: c++ c++11 mkdir


【解决方案1】:

#include &lt;string&gt; 添加到源文件的顶部

将您的 MakeNewUserDir() 函数更改为如下声明和定义:

void User::MakeNewUserDir(const std::string& path)

您可能还需要在类声明中进行类似的更改。

然后你调用mkdir如下:

check = mkdir(path.c_str(), 0777);

然后,当您想使用参数调用 MakeNewUserDir 时,您可以传递字符串文字、std::string 的另一个实例或基于 char* 的 C 字符串。

User u; 
u.MakeNewUserDir("C:/Users/3192833/Documents/MobaXterm/Lee/LinuxCheater/User");

std::string s = "C:/Users/3192833/Documents/MobaXterm/Lee/LinuxCheater";
s += "/User";
u.MakeNewuserDir(s);

【讨论】:

    猜你喜欢
    • 2017-02-03
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多