Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
1 / 1 / 0
Регистрация: 09.06.2013
Сообщений: 35

Рекурсивное копирование каталога

03.10.2013, 19:00. Показов 2303. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
всем привет)задача такая, реализовать команду "cp" с некоторыми определенными ключами.Некоторые ключи уже сделал, остались еще парочку...и вот в чем вопрос,подскажите как можно сделать рекурсивное копирование каталога??т.е. запускаем нашу программу через командную строку в параметрах указываем что копируем каталог в каталог...как это можно организовать?вот имеющейся код:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <cstdlib>
#include "string.h"
#include "stdio.h"
#include "windows.h"
 
 
// функция копирования имени файла1 файлу2 
void cop(char str[],char str1[]){
    char ch[1]; 
    char temp[100];
    temp[0]=0;
    int j;
     if((int) str[1]==58){                  //если файл1 содержит путь
     int i=strlen(str);
     while ((int) str[i]!=92){i--;}             //находим последний \(слэш)
        
     for (j=i+1;j<strlen(str);j++){             
     ch[0]=str[j];
     ch[1]=0;
     strcat(temp,ch);
     }
     strcat(str1,temp);
     } 
     else {strcat(str1,str);
     }
}
 
//Основная программа 
int main(int argc, char * argv[])
{
FILE *out_file;
bool open=false;                        
char sim;
 
  if(argc==4){                          //если введен ключ
   if((int) argv[3][strlen(argv[3])-1]==92){            //если в файле2 указан только путь 
              cop(argv[2],argv[3]);             //присваиваем файлу2 имя файла1
              }            
 
  out_file=fopen(argv[3],"rb");                 //проверяем существует или нет файл приемик
  if(out_file==NULL){ open=false;}
  else {fclose(out_file);open=true;}
  if (strcmp("-I",argv[1])==0){
         if (open==true){
                         printf("rewrite?? \n");
                         scanf("%c",&sim);
                           if ((sim=='y')||(sim=='Y'))
                             {CopyFile(argv[2],argv[3],false);} //копирование с подавлением запроса системы о существовании файла2
                           if ((sim=='n')||(sim=='N'))
                             {CopyFile(argv[2],argv[3],true);}  
                         }
         if (open==false){CopyFile(argv[2],argv[3],false);}
                        }
  if (strcmp("-F",argv[1])==0){
         if(open==true){
                        DeleteFile(argv[3]);
                        CopyFile(argv[2],argv[3],false);
                        }
         if (open==false)
           {
             CopyFile(argv[2],argv[3],false);
           }
}                    
    else {printf("Not key");}
                     
  }
  if(argc==3){                          //если команда введена без ключа
              if((int) argv[2][strlen(argv[2])-1]==92){          
              cop(argv[1],argv[2]);
              }   
              
              CopyFile(argv[1],argv[2],false);          //копирование с подавлением запроса системы о существовании файла2
  }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.10.2013, 19:00
Ответы с готовыми решениями:

Pthread - рекурсивное чтение каталога
Всем доброго времени суток! Решил окунуться в мир многопоточности. И для начала захотел написать программу, которая вывод содержимое...

Рекурсивное копирование файлов каталога
всем доброго времени суток! кто-то может поделиться прогой которая рекурсивно копирует файлы из каталога и его подкаталогов? или подскажите...

Копирование каталога, если несколько файлов из этого каталога заняты процессом
Подскажите пожалуйста как можно скопировать каталог в котором несколько файлов заняты процессом, то бишь они не копируются... в общем мне...

3
40 / 37 / 15
Регистрация: 25.10.2012
Сообщений: 112
03.10.2013, 23:06
Думаю, надо использовать readdir().
В цикле читаете содержимое директории: если очередной элемент - файл, то выполняете копирование; если директория - рекурсивно применяете ту же процедуру.
0
1 / 1 / 0
Регистрация: 09.06.2013
Сообщений: 35
05.10.2013, 09:07  [ТС]
Цитата Сообщение от xanderfomin Посмотреть сообщение
Думаю, надо использовать readdir().
В цикле читаете содержимое директории: если очередной элемент - файл, то выполняете копирование; если директория - рекурсивно применяете ту же процедуру.
а как можно узнать системное время создания(обновления) файла чтобы можно было сравнить файлы и если выполняется условие то произвести копирование?
0
40 / 37 / 15
Регистрация: 25.10.2012
Сообщений: 112
05.10.2013, 12:25
Используйте stat(). Функция вернёт структуру, в которой есть поля, соответствующие времени последнего изменения, последней модификации и последнего доступа.
Или даже лучше будет использовать lstat() - может встретиться символическое ссылка, а stat() попытается по ней проследовать, что в данном случае неправильно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.10.2013, 12:25
Помогаю со студенческими работами здесь

Создание каталога, копирование файлов, архивирование содержимого каталога, запись результата работы в файл
Написать командный файл, выполняющий следующие действия: создать каталог с названием dir&lt;дата&gt;, где &lt;дата&gt; - дата, которая...

Рекурсивное копирование списка
Я новенький в F#. Стал вопрос рекурсивного копирования списка в другой список. Помогите, пожалуйста, написать программу. Спасибо

рекурсивное копирование файлов
Привет! копирую рекурсивно файлы из папок function startCopyFile(_dir){ fs.readdir(_dir, function(err, items){ for...

Boost и рекурсивное копирование
Всем привет! Необходимо написать консольное приложение для резервного копирования. На вход подается файл вида: src=source/path ...

Рекурсивное копирование папок
Как сделать, чтобы копировало не только папку и файлы, но и остальные папки внутри папки которую копируем? char fil; char cop; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru