如何制作一个与.txt文件一起使用的C 程序而不显示

How to make a C++ program that works with a .txt file without showing it

本文关键字:程序 显示 一起 文件 何制作 txt 一个      更新时间:2023-10-16

我的程序需要使用隐藏的文本文件来跟踪用户名。

但是,当程序启动时,如果它在同一目录中找不到'name.txt'文件,则会生成一个可见的用户。

用户可以查看,编辑,等等。我如何防止这种情况发生,以便只有我的程序才能修改文件?

另外,是否有更好的方法来保持对用户名称的了解(请记住,我通常是编程的新手,不仅是C )?

)?
#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <string>
#include <Windows.h>
using std::string;
using std::cout;
using std::cin;
using std::ifstream;
using std::ofstream;
int main()
{
    string line;
    ifstream example;
    example.open("Name.txt");
    getline(example, line);
    if (line.compare("") == 0)
    {
        example.close();
        string con;
        cout << "Welcome to this program!n";
        cout << "Do you want to register? (y/n) ";
        cin >> con;
        con[0] = tolower(con[0]);
        if (con.compare("n") != 0)
        {
            string name;
            ofstream one;
            one.open("Name.txt");
            cout << "What's your name? ";
            cin >> name;
            one << name;
            one.close();
            cout << "See you later " << name << ".";
            Sleep(4000);
        }
    }
    else
    {
        cout << "Welcome back " << line << ".";
        example.close();
        Sleep(4000);
    }
}

编辑:我刚刚意识到我说"跟踪用户"。现在,我意识到你们为什么认为我想对这个程序做一些不好的事情。我现在进行了更正,我的意思是"跟踪用户的 name '。

我知道您要维护包含所有注册用户名称或其他类型的当前用户数据的文件。

问题

您的代码试图在程序的当前工作目录中打开文件。不幸的是,这取决于用户启动程序的方式。

读取文件时,它在打开期间也忽略了可能的错误。因此,如果不存在文件,则您的代码将以ofstream打开文件(如果不存在,则将创建文件)。

如何解决它?

要满足您的要求,您应该在预定的位置中打开文件(例如在安装过程中或程序的配置中修复)。请参阅本文,有关在Windows平台上可以理想地将数据和配置文件存储的位置。

如果要确保程序仅在文件已经存在时仅打开该程序,则应在ifstream上验证open的结果,并在失败时发出错误消息:

example.open("Name.txt");
if (!example) {
    cout << "OUCH ! Fatal error: the registration file couldn't be opened !" <<endl; 
    exit (1);     
}

如何保护文件免受用户的影响?

请注意,如果您的程序读取并从文件中写入数据,则用户也可以找到并手动编辑。这将很难预防。

另外,您可以考虑使用Windows注册表,这对用户的编辑不那么琐碎(尽管不是不可能)。这种方法的主要不便是它的系统依赖性,并且将使您的代码移植到其他平台更加困难。

如果要完全保护文件,则可以按照评论中的建议,对文件进行加密。加密是复杂的业务;考虑使用诸如OpenSSL或经过验证的算法之类的库。

这将保护您免受普通用户的侵害。但是,您仍然会接触到能够反向工程的黑客,并找到必须以某种方式嵌入代码中以解密文件的加密密钥。