Как обойти при копировании открытые кем-то файлы?
сетевого диска 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);
______________________________
Привет, вот часть проги, копирующая файлы с
сетевого диска 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);
______________________________
Привет, вот часть проги, копирующая файлы с
сетевого диска 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);
}
}
Вот собсно.
{
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]
Ну тут я заношу все в комбо, но я думаю ты понял что и как сделать