试图在 C 目录中创建文件,但未创建文件
Trying to create file in directory in C, but file is not being created
我已经搜索了好几个小时了,但无法弄清楚为什么这不起作用。我想在 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 应该是文件名。我现在卡住了,请帮忙。
您正在 运行 程序所在的当前目录中创建文字名称为 "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 );
在这段代码中,文件应该被称为 "str"(这是为了测试还是你真的想使用 str 变量的内容?
我已经搜索了好几个小时了,但无法弄清楚为什么这不起作用。我想在 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 应该是文件名。我现在卡住了,请帮忙。
您正在 运行 程序所在的当前目录中创建文字名称为 "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 );
在这段代码中,文件应该被称为 "str"(这是为了测试还是你真的想使用 str 变量的内容?