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

Ваш аккаунт

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

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

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

Как обойти при копировании открытые кем-то файлы?

1.9K
02 октября 2003 года
alexBCB
12 / / 07.10.2002
Привет, вот часть проги, копирующая файлы с
сетевого диска F . Нужно обойти ( просто пропустить)
файлы , открытые пользователями, иначе появляется
ошибка копирования и программа обрывает копирование...Как это можно сделать?

ZeroMemory(&ah,sizeof(ah));
ah.wFunc = FO_COPY;
ah.pFrom = "F:\\*.*\0";
ah.pTo = "d:\\TEST";
ah.fFlags = FOF_NOCONFIRMATION ;
ah.hNameMappings = 0;
ah.lpszProgressTitle = NULL;
SHFileOperation (&ah);
______________________________
487
03 октября 2003 года
ddnh_bc
301 / / 16.09.2003
Цитата:
Originally posted by alexBCB
Привет, вот часть проги, копирующая файлы с
сетевого диска F . Нужно обойти ( просто пропустить)
файлы , открытые пользователями, иначе появляется
ошибка копирования и программа обрывает копирование...Как это можно сделать?

ZeroMemory(&ah,sizeof(ah));
ah.wFunc = FO_COPY;
ah.pFrom = "F:\\*.*\0";
ah.pTo = "d:\\TEST";
ah.fFlags = FOF_NOCONFIRMATION ;
ah.hNameMappings = 0;
ah.lpszProgressTitle = NULL;
SHFileOperation (&ah);
______________________________



Цитата:
Originally posted by alexBCB
Привет, вот часть проги, копирующая файлы с
сетевого диска F . Нужно обойти ( просто пропустить)
файлы , открытые пользователями, иначе появляется
ошибка копирования и программа обрывает копирование...Как это можно сделать?

ZeroMemory(&ah,sizeof(ah));
ah.wFunc = FO_COPY;
ah.pFrom = "F:\\*.*\0";
ah.pTo = "d:\\TEST";
ah.fFlags = FOF_NOCONFIRMATION ;
ah.hNameMappings = 0;
ah.lpszProgressTitle = NULL;
SHFileOperation (&ah);
______________________________



Честно говоря, таким путем, ты можешь и не добиться желаемого результата - а что если уже НА МОМЕНТ копирования кто-то на сетевом диске файл заюзает?

А в плане открытых или не открытых... Могу предложить такой кусок кода:

#include <stdio.h>
#include <filectrl.hpp>

void __fastcall _move_file(TSearchRec sr, AnsiString _from,AnsiString _to)
{
FILE *_src;
AnsiString src_name,dest_name;
if (!(sr.Attr&faDirectory))
{
src_name=_from+"\\"+sr.Name;
dest_name=_to+"\\"+sr.Name;
_src=fopen(src_name.c_str(),"r");
// Если файл уже кем-то открыт, _src=NULL
if (_src)
{
fclose(_src);
CopyFile(src_name.c_str(),dest_name.c_str(),FALSE); // Подробнее см. хелп.
}
}
}

void __fastcall _copy_files(AnsiString _from,AnsiString _to)
{
TSearchRec sr;
if (!FindFirst(_from+"\\*.*",faAnyFile,sr))
{
_move_file(sr,_from,_to);
while (!FindNext(sr))
_move_file(sr,_from,_to);
FindClose(sr);
}
}

Вот собсно.

293
03 октября 2003 года
SEDEGOFF
586 / / 06.10.2002
for(int i=0;i<AAA; i++)
{
String filename = '';
filename = "F:\\abc"+IntToStr(i)+".txt"+'\0';
ZeroMemory(&ah,sizeof(ah));
ah.wFunc = FO_COPY;
ah.pFrom = filename.c_str();
ah.pTo = "d:\\TEST";
ah.fFlags = FOF_NOCONFIRMATION ;
ah.hNameMappings = 0;
ah.lpszProgressTitle = NULL;
try
{
SHFileOperation (&ah);
}
catch(...)
{}
}
Ты копируешь по одному файлу и если случаеться косяк то копирование продолжаеться а вот если ты не знаешь имен то
[COLOR=darkblue]
TSearchRec SearchRec;
String patch = "F:\\*.*";
FindFirst(patch, faAnyFile, SearchRec);
ComboBox1->Items->Add(SearchRec.Name);
if(SearchRec.Name != "")
{
while(FindNext(SearchRec) == 0)
{
ComboBox1->Items->Add(SearchRec.Name);
}
}

FindClose(SearchRec);
[/COLOR]
Ну тут я заношу все в комбо, но я думаю ты понял что и как сделать
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог