0
我想在C中編寫一個函數來將目錄的內容複製到另一個目錄。這是我到目前爲止:C函數在UNIX中複製目錄:文件無法複製
void *copydirectory(void *arg1, void *arg2)
{
int error;
struct dirent *direntp;
DIR *dirp_source, *dirp_destination;
char *source, *destination;
copy_t copy;
char filename[MAXNAME];
// Set directory arguments
source = arg1;
destination = arg2;
fprintf(stderr, "Source directory is %s and destination directory is %s\n", source, destination);
// Open directories
if ((dirp_source = opendir(source)) == NULL)
{
fprintf(stderr, "Failed to open %s\n", source);
return 1;
}
if ((dirp_destination = opendir(destination)) == NULL)
{
perror("Failed to open destination directory");
return 1;
}
// Read files in directory
while ((direntp = readdir(dirp_source)) != NULL)
{
copy.tid = pthread_self();
fprintf(stderr, "now at line 64\n");
// Copy source filename
if (snprintf(filename, MAXNAME, direntp->d_name) == MAXNAME)
{
fprintf(stderr, "Input filename %s is too long", direntp->d_name);
continue;
}
fprintf(stderr, "now at line 73\n");
fprintf(stderr, "%s\n", filename);
// Open file for reading
if ((copy.args[0] = open(filename, R_FLAGS)) == -1)
{
fprintf(stderr, "Failed to open source file %s: %s\n", filename, strerror(errno));
continue;
}
// Create destination filename for writing
if (snprintf(filename, MAXNAME, "%s", direntp->d_name) == MAXNAME)
{
fprintf(stderr, "Output filename %s is too long\n", direntp->d_name);
continue;
}
fprintf(stderr, "%s\n", filename);
// Open file for writing
if ((copy.args[1] = open(filename, W_FLAGS, W_PERMS)) == -1)
{
fprintf(stderr, "Failed to open destination file %s: %s\n", filename, strerror(errno));
continue;
}
if (error = pthread_create((©.tid), NULL, copyfilepass, copy.args))
{
fprintf(stderr, "Failed to create thread: %s\n", strerror(error));
copy.tid = pthread_self();
}
}
// Close directory
while ((closedir(dirp_source) == -1) && (errno = EINTR));
fprintf(stderr, "Successfully copied all files in directory \n");
}
現在,爲了測試,我只在名爲dir1和dir2的文件夾中有2個目錄。 dir1包含3個文件:file1,file2,file3。 但是,當我編譯和運行代碼,我得到的消息:
./
./
Failed to open destination file .: is a directory
Failed to open source file file2: No such file or directory
Failed to open source file file3: No such file or directory
../
../
Failed to open destination file .: is a directory
Failed to open source file file1: No such file or directory
任何人有什麼錯什麼建議?
因此,我改變了像你說的snprint函數,但我仍然得到相同的錯誤。我不太清楚添加「%s /%s」是什麼 – zyxxwyz 2013-04-30 00:41:13
@zyxxwyz:'direntp-> d_name'是源目錄*中文件*的名稱。如果你只是把它傳遞給'open()'函數,那麼它不知道你想打開源目錄中的文件 - 它會嘗試在當前目錄中打開它。相反,你需要建立''
呃,我一直在嘗試,但我不知道該怎麼做。我真的不知道如何在C中使用路徑。有沒有更多的提示可以給我? – zyxxwyz 2013-04-30 01:18:05