我现在一直在寻找数小时,但无法弄清楚为什么这不起作用。我想在我创建的目录中用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应该是文件名。我现在被困住了,请帮忙。
答案 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变量的内容?