1

我正在使用 mingw-gcc(CodeBlocks,最新)测试 tmpfile(),程序按预期工作:打开 10 个临时文件,写入 10 个随机字符串,然后读回这 10 个字符串并关闭每个 *fp。

就像我说的,按预期工作,但是阅读了一些关于 win7 上临时位置的文章,我开始在自动擦除之前搜索文件的实际存储位置。在 UNIX 上,默认位置是 /tmp

在 Windows 7 上,我的想法已经用完了...... - 程序文件夹 - 用户/appdata/local/tmp/ - windows/temp

我找不到这些文件,即使是总指挥官,我也从里面的一些已知字符串中进行了搜索。没有任何。任何想法?

4

3 回答 3

0

我也有同样的问题,在查看了此处链接的线程后:

http://sourceforge.net/p/mingw/bugs/666/

...我认为 MinGW 家伙推出了一个特殊版本,将临时文件完全保存在内存中

如果不梳理 MinGW 的来源和/或询问邮件列表,我不知道他们的解决方案有多完整。在任何一种情况下,考虑到它的问题,使用 tmpfile() 以外的其他函数可能是一个更好的主意。

于 2013-08-22T09:17:45.660 回答
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)”中?关于“虚拟商店”文件夹。

于 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 回答