生成随机文件名,然后在C ++中创建文件

时间:2016-09-05 02:37:27

标签: c++ io file-handling

在我的程序中,我正在尝试生成随机文件名,然后使用fopen创建具有该名称的文件。该过程如下

  1. 创建随机文件名
  2. 尝试在c:\
  3. 中创建具有该名称的文件,以检查我们是否是管理员
  4. 将内容写入文件
  5. 我用来制作随机文件名的函数是:

    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
    Not Admin!
    

    如何让程序创建一个名称与屏幕上显示的名称相匹配的文件?没有粗略的行为?

3 个答案:

答案 0 :(得分:1)

简单 只需使用tmpnam c api

示例:

#include <stdio.h>

  int main(void)
  {
    char name[40];
    int i;

    for(i=0; i<3; i++) {
      tmpnam(name);
      printf("%s ", name);
    }
    return 0;
  }

答案 1 :(得分:0)

我认为运行以管理员身份创建的.exe可以让你创建文件。 不是从任何IDE运行程序,而是从文件位置手动运行程序并以管理员身份运行。

答案 2 :(得分:0)

为了解决这个问题,我摆脱了RandomName函数并编辑了IsAdmin以包含它的代码,通过一些调整我能够让它至少工作得很好,代码我最终得到了:

void AdminWrite(const char *suffix,unsigned int length)
{
    FILE *fp;
    const char alphanum[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuv";
    int stringLength = sizeof(alphanum) - 1;
    std::string Str;
    unsigned int i;

    Str.append("c:\\Users\\UserName\\Desktop\\");
    for( i = 0; i < length; ++i)
    {
        Str += alphanum[rand() % stringLength];
    }
    Str += suffix;
    const char *str =Str.c_str();
    cout << str << endl;
    fp = fopen(str,"w+");
    if (fp == NULL) {
            cout << "File pointer was NULL" << endl;
            return;
    } else {
        cout << "File pointer is legit" << endl;
        int b;
        for(b = 0; b != 1337; b++)
        {
            char f = 'c';
            fputc(f, fp);
        }
        return;
    }
    return;
}