Преветсвую всех!!!
у меня возникла небольшая проблемка, просьба помоч кто сможет.
/* подключаем библиотеки */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#define FALSE 0
#define TRUE 1
#define FILENAMESIZE 256
/* ключевое слово для определения типа */
typedef
/* определяем структуру list */
struct list {
char src[FILENAMESIZE];
char dst[FILENAMESIZE];
/* указатель на следующий элемент структуры */
struct list *next;
}
/* название типа данных для структуры LISTFILE */
LISTFILE;
/* операция копирование файлов */
int copyfile(const char *dst, const char *src)
{
FILE *in, *out;
int c;
if ((in = fopen (src, "rb")) == NULL){
printf("Error open src file %s\n", src);
return FALSE;
}
if ((out = fopen (dst, "wb")) == NULL){
printf("Error open dst file %s\n", dst);
fclose(out);
return FALSE;
}
while (!feof(in)){
c = fgetc(in);
if (feof(in)) break;
fputc(c, out);
}
fclose(in);
fclose(out);
return TRUE;
}
int is_dir(const char *name)
{
/* атрибуты файла */
DWORD att;
att = GetFileAttributes(name);
if (att == 0xFFFFFFFF) return FALSE;
if (att & FILE_ATTRIBUTE_DIRECTORY) return TRUE;
return FALSE;
}
/* проверка корректности дирриктории */
/* входные данные */
/* dst - то куда копируем src */
/* src - копируемый */
/* выходные данные */
/* нет */
/* возвращаемое значение */
/* нет */
void correct_dirpath(char *dst, const char *src)
{
int i;
for (i = 0; src != 0; i++) dst = src;
for (i--;dst == '\\' || dst == '/'; i--);
dst[++i] = '\\';
dst[++i] = '\\';
dst[++i] = 0;
}
/* заполнение дирриктории */
/* входные данные */
/* from */
/* to */
/**/
LISTFILE * make_list_dd(LISTFILE *f, char *from, char *to)
{
LISTFILE *t;
HANDLE find;
WIN32_FIND_DATA finddata;
char tmp[FILENAMESIZE];
correct_dirpath(tmp, from);
strcpy(from, tmp);
sprintf(tmp, "%s\\*", tmp);
find = FindFirstFile(tmp, &finddata);
if (!find) return f;
do {
sprintf(tmp, "%s%s", from, finddata.cFileName);
if (!is_dir(tmp)) {
t = (LISTFILE *)malloc(sizeof(LISTFILE));
t->next = f;
strcpy(t->src, tmp);
sprintf(tmp, "%s%s", to, finddata.cFileName);
strcpy(t->dst, tmp);
f = t;
}
if (!FindNextFile(find, &finddata)) break;
} while(TRUE);
FindClose(find);
return f;
}
/* основная функция */
/* входные данные */
/* argc - количество параметров командной строки */
/* argv - параметры командной строки */
/* выходные данные */
/* нет */
/* возвращаемое значение */
/* нет */
void main (int argc, char *argv[])
{
LISTFILE *f = NULL, *t = NULL;
char tmp[FILENAMESIZE];
if (argc < 3) {
printf("Count of argument is wrong!\n");
return;
}
/* если argv[1] и argv[2] оба являются диррикторией */
if (is_dir(argv[1]) && is_dir(argv[2])) {
printf("Copy file from dir %s to dir %s\n", argv[1], argv[2]);
correct_dirpath(tmp, argv[2]);
f = make_list_dd(f, argv[1], tmp);
/* если argv[1] является диррикторией а argv[2] не является диррикторией */
} else if (is_dir(argv[1])) {
printf("Copy file from dir %s to file %s is not valid\n", argv[1], argv[2]);
/* если argv[2] является диррикторией а argv[1] не является диррикторией */
} else if (is_dir(argv[2])) {
printf("Copy file from %s to dir %s\n", argv[1], argv[2]);
f = (LISTFILE *)malloc(sizeof(LISTFILE));
f->next = NULL;
strcpy(f->src, argv[1]);
correct_dirpath(tmp, argv[2]);
sprintf(tmp, "%s%s",tmp, argv[1]);
strcpy(f->dst, tmp);
/* если argv[1] и argv[2] оба являются файлами */
} else {
printf("Copy file from %s to file %s\n", argv[1], argv[2]);
f = (LISTFILE *)malloc(sizeof(LISTFILE));
f->next = NULL;
strcpy(f->src, argv[1]);
strcpy(f->dst, argv[2]);
}
for (t = f; t != NULL; t = t->next) {
if (copyfile(t->dst, t->src)) printf("Copy file %s to %s is complited!\n", t->src, t->dst);
}
while (f) {
t = f;
f = t->next;
free(t);
}
}
по данной программе нужно составить блок схему помогите пожайлуста.