Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Копирование, перемещение и удаление файлов и папок

435
24 декабря 2003 года
avatara
188 / / 07.07.2003
Кто-нибудь может подсказать как осуществить копирование, перемещение и удаление файлов и папок. (приложение консольное)

Например, в командной строке пишешь
copy.exe C:\A A:\B
и все содержимое папки А диска С: копируется в папку В на диске А:

delete.exe A:\B - удаление

move.exe C:\A A:\B - перемещение
Я понимаю, что в ф-ции main надо писать
int argc, char* argv[]
а вот как осуществлять операции с файлами не знаю.
Если у кого-то есть исходники, присылайте на [email]avatara@ukr.net[/email]
319
24 декабря 2003 года
xelos
577 / / 27.02.2003
Цитата:
Originally posted by avatara
Кто-нибудь может подсказать как осуществить копирование, перемещение и удаление файлов и папок. (приложение консольное)

Например, в командной строке пишешь
copy.exe C:\A A:\B
и все содержимое папки А диска С: копируется в папку В на диске А:

delete.exe A:\B - удаление

move.exe C:\A A:\B - перемещение
Я понимаю, что в ф-ции main надо писать
int argc, char* argv[]
а вот как осуществлять операции с файлами не знаю.
Если у кого-то есть исходники, присылайте на [email]avatara@ukr.net[/email]


Функции SDK не подойдут?
DeleteFile(...), CopyFile(...), MoveFile(...)

435
24 декабря 2003 года
avatara
188 / / 07.07.2003
Цитата:
Originally posted by xelos

Функции SDK не подойдут?
DeleteFile(...), CopyFile(...), MoveFile(...)



К сожалению необходимо написать их собственными руками.
Я так понял надо делать рекурсивный обход. Как это сделать я знаю, а вот что делать дальше нет.
Знаю что для создании папки надо воспользоваться ф-цией _mkdir а для удаления _rmdir.

319
24 декабря 2003 года
xelos
577 / / 27.02.2003
Цитата:
Originally posted by avatara


К сожалению необходимо написать их собственными руками.
Я так понял надо делать рекурсивный обход. Как это сделать я знаю, а вот что делать дальше нет.
Знаю что для создании папки надо воспользоваться ф-цией _mkdir а для удаления _rmdir.


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

435
26 декабря 2003 года
avatara
188 / / 07.07.2003
Цитата:
Originally posted by xelos

есть похожие функции и для копирования, и



После долгий мучений родил такую программу по удалению. Уже сделал и копирование и перемещение Единственная проблема в следующем: При удалении прога проверяет атрибут "только чтение" и при нахождении его предлагает -
1-удалить 2- пропустить 3- удалить все 4- отмена
Получается все, но "удалить все" работает как-то неправильно. Посмотрите код пожалуйста, может чего-нибудь подскажете??

#include <iostream.h>
#include <windows.h>
#include <io.h>
#include <stdio.h>
#include <direct.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>

// Максимальная длина пути к файлу
#define MAX_PATH 260

void DelDir(char* from_path)
{
char* temp = new char [260];
int choice = 0;

strcpy(temp, from_path);
strcat(temp, "\\*.*");

_finddata_t *f = new _finddata_t;
int OK = _findfirst(temp, f);
int Done = OK;
while (Done != -1)
{
if (strcmp(f->name, ".") == 0 || strcmp(f->name, "..") == 0)
{
Done = _findnext(OK, f);
continue;
}
if (f->attrib & 0x10)
{
sprintf(temp, "%s\\%s", from_path, f->name);
DelDir(temp);
_rmdir(temp);
}
else
{
sprintf(temp, "%s\\%s", from_path, f->name);
if ((_access(temp,2) == -1) && choice != 3)
{
printf("File %s is a read-only\n", temp);
printf("1- Delete 2- Pass 3- Delete all 4- Cancel\n");
scanf("%d", &choice);
switch(choice)
{
case 1: _chmod(temp, _S_IWRITE);
remove(temp);
choice = 0;
break;
case 2: choice = 0;
break;
case 3: _chmod(temp, _S_IWRITE);
remove(temp);
choice = 3;
break;
case 4: exit (0);
break;
default:
printf("Incorrect choice, operation abort!!");
break;
}

}
else
_chmod(temp, _S_IWRITE);
remove(temp);

}
Done = _findnext(OK, f);
}
delete [] temp;
_findclose(OK);
delete f;
}




void main (int argc, char* argv[])
{

char Path[MAX_PATH];
// Если в командкой строке 1 параметр (т. е. путь к нашему exe-шнику)
if(argc == 1)
{
// Запрашиваем все необходимые данные
printf("Input path to file: ");
gets(Path);
DelDir(Path);
}
else if (argc == 2)
{
strcpy(Path, argv[1]);
DelDir(Path);
}
else
{
printf("Incorrect parameters: "
"usage <program> or "
"<program> <path to delete>\n");
return;
}


}

Все есть в присоединенном файле.

435
29 декабря 2003 года
avatara
188 / / 07.07.2003
Цитата:
Originally posted by avatara


Все есть в присоединенном файле.



Теперь все работает переменную choice в данном примере надо было сделать глобальной или static !!

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог