我正在开发一个自定义版本的cp,其中参数是两个目录,第一个目录中的文件被复制到第二个目录。我目前的问题是让第一个目录中的文件打开。当我到达代码的“打开文件”部分时,我得到一个错误,说没有文件,这没有意义,因为文件名在错误中打印出来。我错过了一些简单的事吗?我想我已经包含了足够多的代码。
int main(int ac, char *av[]) {
int in_fd, out_fd, n_chars;
char buf[BUFFERSIZE];
struct stat sb;
DIR *copyFrom;
DIR *copyTo;
struct dirent *ep;
/* open dirs */
copyFrom = opendir(av[1]);
copyTo = opendir(av[2]);
while(ep = readdir(copyFrom))
{
/* open files */
if ( (in_fd=open(ep->d_name, O_RDONLY)) == -1 )
oops("Cannot open", ep->d_name);
if ( (out_fd=creat(ep->d_name, COPYMODE)) == -1 )
oops( "Cannot create", ep->d_name);
/* copy files */
while ( (n_chars = read(in_fd , buf, BUFFERSIZE)) > 0 )
if ( write( out_fd, buf, n_chars ) != n_chars )
oops("Write error to ", av[2]);
if ( n_chars == -1 )
oops("Read error from ", av[1]);
/* close files */
if ( close(in_fd) == -1 || close(out_fd) == -1 )
oops("Error closing files","");
}
}
答案 0 :(得分:1)
DIR
返回的readdir
记录仅返回文件的基本名称。您需要将其与目录连接以正确打开文件。
这样的事情:
char srcfile[1024];
sprintf("%s/%s", av[1], ep->d_name);
if ( (in_fd=open(srcfile, O_RDONLY)) == -1 )
oops("Cannot open", srcfile);