尝试在C中的目录中创建文件,但是没有创建文件

时间:2015-05-10 16:12:05

标签: c fopen

我现在一直在寻找数小时,但无法弄清楚为什么这不起作用。我想在我创建的目录中用C创建一个文件,但是没有创建该文件。以下是与制作目录和创建文件相关的相关代码。

#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include<assert.h>

char d1[50] = "myname.rooms.";
char str[50];
char filename[50];
int d2 = getpid();
int dir;
const char *rooms[10] = {"Lillard", "Matthews", "Batum", "Aldridge", "Lopez", "Mccollum", "Leonard", "Blake", "Gee", "Freeland"};
int z;

sprintf(str, "%i", d2);

strcat(d1, str);

dir = mkdir(d1, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH);

snprintf(filename, 50, "/%s/%s.txt", d1, rooms[0]);

z = strlen(filename);

for(i=0; i<z; i++)
{
    str[i] = filename[i]; 
} 

FILE *f;

f = fopen("str", "w+");

fprintf(f, "ROOM NAME: %s\n", (rooms[0]));

fclose(f);

使目录正常工作,在该目录或其他任何地方都没有创建文件。我想循环并为每个房间创建文件,但我只想让它首先运行1。我打印出str字符串,它出现在/myname.rooms.22222/Lillard.txt,其中myname.rooms.22222是目录,Lillard.txt应该是文件名。我现在被困住了,请帮忙。

2 个答案:

答案 0 :(得分:2)

您正在运行程序的当前目录中创建文字名为"str"的文件。

做这样的事情:

char dir_name[PATH_MAX];
mode_t dir_mode = ...; /* your file mode bits */
int i = ...; /* your value */

snprintf( dir_name, PATH_MAX, "whatever.%d", i );

if ( mkdir( dir_name, dir_mode ) == -1 ) {
    if ( errno != EEXIST ) err( 1, "mkdir" );
}

if ( chdir( dir_name ) == -1 ) err( 1, "chdir" );

char file_name[FILENAME_MAX];

snprintf( file_name, FILENAME_MAX, "%s.txt", whatever );

FILE* fp = fopen( file_name, "w+" );

if ( fp == NULL ) err( 1, "fopen" );

/* now you have the file open for writing */
...

fclose( fp );

答案 1 :(得分:0)

在这段代码中,文件应该被称为“str”(这是用于测试还是你真的想要使用str变量的内容?