1

mingw-gcc (CodeBlocks、最新) で tmpfile() をテストしていますが、プログラムは期待どおりに動作します。10 個の一時ファイルを開き、10 個のランダムな文字列を書き込み、それらの 10 個の文字列を読み戻し、各 *fp を閉じます。

私が言ったように、期待どおりに動作しますが、win7 の一時的な場所に関するいくつかの記事を読んで、自動消去の前にファイルが実際に保存されている場所を検索し始めました。UNIX では、デフォルトの場所は /tmp です。

Windows 7 では、アイデアが不足しています... - プログラム フォルダー - user/appdata/local/tmp/ - windows/temp

私はそれらのファイルを見つけることができず、内部のいくつかの既知の文字列からトータルコマンダーでも検索しました. なし。何か案が?

4

3 に答える 3

0

Process Explorer を使用して、このプログラムで開いているハンドルを監視しました。

#include <stdio.h>
int main(int argc, char *argv[]) {
    int a;
    scanf("%d", &a);
    printf("%p", tmpfile());
    scanf("%d", &a);
    return 0;
}

が実行された後printf("%p", tmpfile());、新しいファイル ハンドルが開かれ、ファイル パスはC:\Users\sashoalm\AppData\Local\VirtualStore\t9mc. プログラムをもう一度実行したところ、今度はC:\Users\sashoalm\AppData\Local\VirtualStore\t728. そのため、それらを に配置しC:\Users\sashoalm\AppData\Local\VirtualStore\、名前は「t」で始まるランダムに生成された文字列です。

ファイルが「C:\Users\<username>AppData\Local\VirtualStore\Program Files(x86)」に配置されるのはなぜですか?を参照してください。「Virtual Store」フォルダについて。

于 2016-07-04T08:40:40.063 に答える
-1

/ Dev-C++ 5.11 (Mngv) gcc をテストしましたが、動作しません。Code:: Block の Borland 5.5 では問題ありません。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>

int main(int argc, char *argv[]) {
    char filename[L_tmpnam];
    char *strs[] = {"Hello\n","Goodbye\n","Cat\n","Dog\n",NULL};
    char **mover = strs;
    char line[80],command[80];
    FILE *fp;

    fp = tmpfile();
    for(; *mover != NULL; mover++) fputs(*mover,fp);
    rewind(fp);
    while(fgets(line,80,fp))printf("%s",line);
    fclose(fp);

    if(tmpnam(filename) == NULL){
        printf("Could not get non-conflicting file name\n");
        exit(EXIT_FAILURE);
    }
    printf("\nFilename obtained is: %s\n\n",filename);
    fp = fopen(filename, "w+");
    for(mover = strs; *mover != NULL; mover++) fputs(*mover, fp);
    rewind(fp);
    while(fgets(line,80,fp)) printf("%s",line);
    putchar('\n');
    fclose(fp);


    return 0;
}
于 2015-09-24T11:57:09.863 に答える