копирование каталога на другой диск средствами C++
Привожу варианты, которые не работают:
Код:
CopyFile("D:\copyfile", "C:\LouReed", true);
MoveFile("D:\copyfile", "C:\LouReed");
MoveFileEx("D:\copyfile", "C:\LouReed", MOVEFILE_COPY_ALLOWED);
MoveFile("D:\copyfile", "C:\LouReed");
MoveFileEx("D:\copyfile", "C:\LouReed", MOVEFILE_COPY_ALLOWED);
PS: компилятор Devcpp 4.9.9.2.
Надо использовать другие функции.
Код:
SHFILEOPSTRUCT s;
s.wFunc = FO_COPY;
s.pFrom = "C:\\folder\0"; //двойное нуль-терминирование
s.pTo = "D:\\folder_to\0";//тоже
... //остальные поля структуры
if(SHFileOperationA(&s))
return 1000; //при ошибке
s.wFunc = FO_COPY;
s.pFrom = "C:\\folder\0"; //двойное нуль-терминирование
s.pTo = "D:\\folder_to\0";//тоже
... //остальные поля структуры
if(SHFileOperationA(&s))
return 1000; //при ошибке
Код:
#include <stdio.h>
#include <tchar.h>
#include <io.h>
#include <direct.h>
//перенос папки(включая вложенные)
void move_dir(const TCHAR* old_dir, const TCHAR* new_dir) {
TCHAR ps[FILENAME_MAX];
TCHAR ds[FILENAME_MAX];
long fp;
_tfinddata_t fi;
_stprintf(ps, _T("%s\\*.*"), old_dir);
fp = _tfindfirst(ps, &fi);
if(fp == -1L)
return;
if(_tmkdir(new_dir) != 0) {
_findclose(fp);
return;
}
do {
_stprintf(ds, _T("%s\\%s"), new_dir, fi.name);
_stprintf(ps, _T("%s\\%s"), old_dir, fi.name);
if(fi.attrib & _A_SUBDIR) {
if((fi.name[0] != _T('.')) && (_tcslen(fi.name) > 2))
move_dir(ps, ds);
} else
rename(ps, ds);
} while(_tfindnext(fp, &fi) != -1L);
_findclose(fp);
_rmdir(old_dir);
}
int main(void) {
move_dir( _T("D:\\исходная папка"),_T("C:\\новое место"));
_gettchar();
return 0;
}
#include <tchar.h>
#include <io.h>
#include <direct.h>
//перенос папки(включая вложенные)
void move_dir(const TCHAR* old_dir, const TCHAR* new_dir) {
TCHAR ps[FILENAME_MAX];
TCHAR ds[FILENAME_MAX];
long fp;
_tfinddata_t fi;
_stprintf(ps, _T("%s\\*.*"), old_dir);
fp = _tfindfirst(ps, &fi);
if(fp == -1L)
return;
if(_tmkdir(new_dir) != 0) {
_findclose(fp);
return;
}
do {
_stprintf(ds, _T("%s\\%s"), new_dir, fi.name);
_stprintf(ps, _T("%s\\%s"), old_dir, fi.name);
if(fi.attrib & _A_SUBDIR) {
if((fi.name[0] != _T('.')) && (_tcslen(fi.name) > 2))
move_dir(ps, ds);
} else
rename(ps, ds);
} while(_tfindnext(fp, &fi) != -1L);
_findclose(fp);
_rmdir(old_dir);
}
int main(void) {
move_dir( _T("D:\\исходная папка"),_T("C:\\новое место"));
_gettchar();
return 0;
}
Код:
#include <stdio.h>
#include <stdlib.h>
#include <clocale>
int main () {
setlocale(LC_ALL, "");
if (!system(NULL)) {
puts ("Командный процессор недоступен.");
exit (EXIT_FAILURE);
}
system("xcopy D:\\copyfile C:\\LouReed /E");
return 0;
}
#include <stdlib.h>
#include <clocale>
int main () {
setlocale(LC_ALL, "");
if (!system(NULL)) {
puts ("Командный процессор недоступен.");
exit (EXIT_FAILURE);
}
system("xcopy D:\\copyfile C:\\LouReed /E");
return 0;
}
Цитата: sadovoya
Еще вариант:
Код:
#include <stdio.h>
#include <stdlib.h>
#include <clocale>
int main () {
setlocale(LC_ALL, "");
if (!system(NULL)) {
puts ("Командный процессор недоступен.");
exit (EXIT_FAILURE);
}
system("xcopy D:\copyfile C:\LouReed /E");
return 0;
}
#include <stdlib.h>
#include <clocale>
int main () {
setlocale(LC_ALL, "");
if (!system(NULL)) {
puts ("Командный процессор недоступен.");
exit (EXIT_FAILURE);
}
system("xcopy D:\copyfile C:\LouReed /E");
return 0;
}
спасибо, действительно помогло, почему-то забыл про старый добрый cmd.
Всем спасибо, проблема решена.