如何制作一个与.txt文件一起使用的C 程序而不显示
How to make a C++ program that works with a .txt file without showing it
我的程序需要使用隐藏的文本文件来跟踪用户名。
但是,当程序启动时,如果它在同一目录中找不到'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或经过验证的算法之类的库。
这将保护您免受普通用户的侵害。但是,您仍然会接触到能够反向工程的黑客,并找到必须以某种方式嵌入代码中以解密文件的加密密钥。
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- 程序显示以退出代码 0; 结束
- 为什么此程序显示"unreachable code"警告?我该如何抑制它?
- 为什么程序显示我"was not declared in this scope"?
- 我的程序显示许多错误,"error: no matching function for call to 'getPercentScore'"
- 将数据分配给了数组分配,但程序显示了以缓冲区超支的输出
- 为什么程序显示的值大于结果或垃圾值
- 为什么程序显示字符串超出范围
- 有人可以解释为什么该程序显示我 6 和 4
- 我的QT程序显示带有标题的空白窗口
- C 如何使我的程序显示值而不是内存位置
- 使QT/C 程序显示其文件类型,如Windows上已知
- 如何在所有平台上使用C++程序显示重音字符
- 更新:程序显示fstream的地址,而不是文本文件
- 程序显示学生的详细信息,如名字父亲名字滚动没有CGPA输出
- Google Drive将我的应用程序显示为病毒
- 我的程序显示空的表面,它需要在那里显示地图
- 凭据提供程序.显示一种进度条并禁用密码或PIN字段
- 无法让我的C++程序显示输出
- c++程序显示投票的百分比不显示正确的结果