大家好,我正在尝试从我为网络编程类(class)编写的服务器程序中打开一个文件,以发送到我的客户端程序。我试过使用 fopen,
strcat(cwd, msg); //i append the directory to the filename
printf("%s\n", cwd);
if(n>0){
req = fopen(msg, "r"); //fopen(~\\blah\\blah\\blah\\msg)
msg 是一个 txt 文件的名称。
我想用 c 语言完成。
有什么想法吗?非常感谢。
想补充一点,即使打印出的目录是正确的,但 req 结果为空。
最佳答案
您问题的真正答案是您不能。 C 无法让您知道程序镜像的构建文件位于何处,部分原因是它甚至不假设它是从文件构建的。因此,没有一种通用的、可移植的方法可以保证有效。
但是,在某些环境和条件下,您可以使用 argv[0]
,它可能包含找到程序文件所使用的路径。这种情况在 Unix/Linux 下很常见(但不一定——您对启动程序的程序负有责任)。我不知道它在 Windows 等其他系统上的表现如何。
如果你想使用那个方法,你可以这样做:
FILE *openrelative(char *base, char *name)
{
char *buf1, *dir, *buf2;
int len;
FILE *ret;
buf1 = strdup(base); /* dirname might modify its argument, so copy base. */
dir = dirname(buf1);
len = strlen(dir) + 1 + strlen(name) + 1;
buf2 = malloc(len);
snprintf(buf2, len, "%s/%s", dir, name);
ret = fopen(buf2, "r");
free(buf2); free(buf1);
return(ret);
}
然后,从 main
调用这个函数作为 openrelative(argv[0], "msg.txt")
。或者来自其他地方,但您需要以某种方式使 argv[0]
可用。
但是,由于不能保证这些方法一定有效,因此您不应该真正使用它们。尤其是当您的程序应该是可移植的或被其他人使用时。
关于c - 如何打开与程序位于同一目录中的 c 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14973668/