簡體   English   中英

生成一個隨機文件名,然后創建文件,在 C++ 中

[英]Producing a random file name, and then creating the file, In C++

在我的程序中,我試圖生成一個隨機文件名,然后使用 fopen 創建一個具有該名稱的文件。 過程如下

  1. 創建一個隨機文件名
  2. 通過嘗試在 c:\\ 中創建具有該名稱的文件來檢查我們是否是管理員
  3. 將東西寫入文件

我用來制作隨機文件名的函數是:

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!

如何讓程序創建一個名稱與其在屏幕上顯示的名稱相匹配的文件? 並且沒有粗略的行為?

簡單只需使用 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;
  }

我認為以管理員身份運行此處創建的 .exe 可以讓您創建文件。 不是從任何 IDE 運行程序,而是從文件位置手動運行程序並以管理員身份運行。

為了解決這個問題,我擺脫了的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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM