【发布时间】:2016-09-05 02:37:27
【问题描述】:
在我的程序中,我试图生成一个随机文件名,然后使用 fopen 创建一个具有该名称的文件。流程如下
- 创建一个随机文件名
- 通过尝试在 c:\ 中创建具有该名称的文件来检查我们是否是管理员
- 将内容写入文件
我用来制作随机文件名的函数是:
const char *RandomName(const char *suffix,unsigned int length)
{
const char alphanum[] =
"0123456789"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz";
int stringLength = sizeof(alphanum) - 1;
std::string Str;
unsigned int i;
Str.append("c:\\");
for( i = 0; i < length; ++i)
{
Str += alphanum[rand() % stringLength];
}
Str += suffix;
const char *str =Str.c_str();
return str;
}
我用来创建文件并检查管理员的功能是:
bool IsAdmin()
{
const char *n = RandomName(".BIN",5);
cout << n << endl;
FILE *fp;
fp = fopen((const char *)n,"w+");
if (fp == NULL) {
cout << "File pointer was NULL" << endl;
return false;
} else {
cout << "File pointer is legit" << endl;
//fclose(fp);
//remove(n);
int b;
for(b = 0; b != 1338; b++)
{
char f = 'c';
fputc(f, fp);
}
return true;
}
}
以管理员身份运行时,程序会打印:
c:\9UswA.BIN 不是管理员!如何让程序创建一个名称与屏幕上显示的名称相匹配的文件?并且没有粗略的行为?
【问题讨论】:
-
这里有什么意义?创建临时文件或确定您是否以管理员权限运行?对于前者,请检查 tmpnam 或 tmpfile 或 GetTempFileName 函数。你用谷歌搜索过这个吗?
-
我说的重点是,创建一个随机文件名和与之配套的文件,主要是检查程序是否以管理员身份运行。上面的代码也显示了这一点。
-
您的
RandomName函数正在返回一个指向函数本地std::string对象数据的指针。这个std::string对象在函数结束时被销毁,此时返回的指针无效。为什么不直接返回std::string? -
另外,名为
prefix的参数被用作后缀。前缀出现在开头。 -
@Benjamin 我不确定,我离一个好的编码员还很远。明天当我再次可以访问代码时,我会检查一下,非常感谢!您为什么不将其作为答案提交,以便我稍后选择它。我才意识到我把它叫做前缀,我一定是累了。我会把它改成后缀。
标签: c++ io file-handling