#包括
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
#include <sys/types.h>
#define MAX 100
int copy(char fileName[], char dirName[])
{
printf("0");
//open directory and test if it opens successfully
DIR *OGdir = opendir("~/");
struct dirent *OGdp = readdir(OGdir);
if(OGdir == NULL)
{
printf("\nUnable To Open Directory\n");
return(-1);
}
printf("1\n");
//more code will go here i have more to do but this wont even work
return(0);
}
我正在打开当前目录,我需要能够打开其中的文件来将其复制,但我甚至无法打开该目录。
当我尝试只打开文件而不尝试目录时,也会发生这种情况。我认为这与 ssh 服务器或我需要做的其他事情有关,但我已经尝试了很多不同的方法,这几乎就是到处告诉我要这样做的方式,我是不是忘了什么?因为我在学校的 linux ssh 服务器上,所以我需要做一些特别的事情吗?这是我第一次使用 ssh 服务器,所以如果我应该已经知道这一点,我深表歉意。
在检查是否 OGdir
为 之前, readdir
您要传递 OGdir
给 NULL
。在使用指针之前,您应该先检查:
if(OGdir == NULL)
{
printf("\nUnable To Open Directory\n");
// return(-1);
return EXIT_FAILURE; // This a more portable way to indicate failure than the constant -1
}
struct dirent *OGdp = readdir(OGdir); // Move this line after the if
其次,从代码中打开文件/目录与使用符号不兼容 "~/"
。如果您想使用当前工作目录,请使用 opendir(".");
。或者您可以 手动查询主目录 .
但是如果你 echo ~
在终端中输入,你的主目录就会被打印出来,这表明是 ~
在命令行级别而不是在程序级别扩展到你的主目录。
此外,通常你不会只调用 readdir()
一次。如果你在某个时候想要循环遍历目录中的所有文件,我建议使用:
struct dirent *OGdp;
while((OGdp = readdir(OGDir)) != NULL)
{
// Your code
}
而不是:
struct dirent *OGdp = readdir(OGDir);
while(OGdp != NULL)
{
// Your code
OGdp = readdir(OGDir);
}