Отправляет email-рассылки с помощью сервиса Sendsay

Web-Мастеринг - с нуля до профи

  Все выпуски  

нет.


Познавательное программирование

(comp.soft.prog.urisprog)

Выпуск 33


Здравствуйте, Уважаемые подписчики!
Фотолипецк.ру
Художественные фотографии Липецка и Липецкой области.

Полезные функции для C++. Часть 1

Переместить файл в корзину
//Функция удаляет файл в корзину
//delFile - удаляемый файл

void ReplaceFileToRec(AnsiString delFile)
{ char *file = delFile.c_str();
//Обязательно два нулевых символа в конце
StrCat(file, "\0");
SHFILEOPSTRUCT op;
ZeroMemory(&op,sizeof(op));
op.hwnd = Handle;
op.wFunc = FO_DELETE;
op.pFrom = file;
op.fFlags = FOF_ALLOWUNDO;
SHFileOperation(&op);
}


Создание ярлыка
//Функция создает ярлык для указанного файла
//lpszPathObj - файл, для которого нужен ярлык
//lpszPathLink - путь, где будет храниться ярлык
//lpszDesc - описание ярлыка

//Обязательно перед #pragma hdrstop надо дефайнить
//NO_WIN32_LEAN_AND_MEAN
#define NO_WIN32_LEAN_AND_MEAN
HRESULT CreateLink(LPCSTR lpszPathObj, LPSTR lpszPathLink, LPSTR lpszDesc)
{
HRESULT hres;
IShellLink *psl;
CoInitialize(NULL);
hres = CoCreateInstance(CLSID_ShellLink, NULL,
CLSCTX_INPROC_SERVER, IID_IShellLink, (void **)&psl);
if(SUCCEEDED(hres))
{
IPersistFile *ppf;
psl->SetPath(lpszPathObj);
psl->SetDescription(lpszDesc);
hres = psl->QueryInterface(IID_IPersistFile, (void**)&ppf);
if(SUCCEEDED(hres))
{
wchar_t wsz[MAX_PATH];
MultiByteToWideChar(CP_ACP, 0, lpszPathLink, -1, wsz,
MAX_PATH);
hres = ppf->Save(wsz, true);
ppf->Release();
}
psl->Release();
CoUninitialize();
}
return hres;
}


Копирование файла по локальной сети
//Функция копирует файл по локальной сети
//ComputerName - имя компьютера, с которого копируем
//LocalPath - путь к файлу, который копируем, без имени компутера
//DestFile - путь к файлу на нашем компьютере
#include "windows.h"
void CopyLocalFile(AnsiString ComputerName, AnsiString LocalPath, AnsiString DestFile)
{ AnsiString Path = "\\\\" + ComputerName + "\\" + LocalPath;

if(CopyFile(Path.c_str(), DestFile.c_str(), FALSE))
{ ShowMessage("Копирование прошло успешно");
}
else
{ ShowMessage("Невозможно скопировать файл");
}
}


Копирование файла
//Функция копирует файл в указанный
//sorFile - копируемый файл
//desFile - в который надо скопировать

void CopyFileFromTo(AnsiString sorFile, AnsiString desFile)
{
TStream* stream1= new TFileStream(sorFile,fmOpenRead | fmShareDenyWrite);
try
{
TStream* stream2 = new TFileStream(desFile fmOpenWrite | fmShareDenyRead);
try
{
stream2->CopyFrom(stream1, stream1->Size);
}
__finally
{
delete stream2;
}
}
__finally
{
delete stream1;
}
}


Копирование папки
//Функция копирует всю папку
//sorDir - папка, которую надо скопировать
//copDir - папка, в кторую надо скопировать

void CopyFolderAll1(AnsiString sorDir, AnsiString copDir)
{ MkDir(copDir);
int srRes;
TSearchRec F;
TStringList *DirList = new TStringList();
if(sorDir[sorDir.Length()] == '\\') sorDir.SetLength(sorDir.Length()-1);
srRes = FindFirst(sorDir + "\\*.*",faAnyFile,F);
while(srRes == 0)
{ if((F.Attr & faDirectory) && (F.Name != "." && F.Name != ".."))
{ DirList->Add(sorDir + "\\" + F.Name);
MkDir(copDir + "\\" + F.Name);
}
else if(F.Name != "." && F.Name != "..")
{ CopyFileFromTo(sorDir + "\\" + F.Name, copDir + "\\" +
F.Name,cop);
}
srRes = FindNext(F);
}
FindClose(F);
if(DirList->Count != 0)
{ for(int i = 0; i < DirList->Count; ++i)
CopyFolderAll1(DirList->Strings[i], copDir + "\\" +
ExtractFileName(DirList->Strings[i]),cop);
}
delete DirList;
}


Удаление папки
//Функция удаляет папку со всеми вложенными файлами
//delDir - удаляемая папка

void DeleteFolderAll1(AnsiString delDir)
{ int srResd;
TSearchRec Fd;
TStringList *DirListd = new TStringList();
if(delDir[delDir.Length()] == '\\')delDir.SetLength(delDir.Length()-1);
srResd = FindFirst(delDir + "\\*.*",faAnyFile,Fd);
while(srResd == 0)
{ if((Fd.Attr & faDirectory) && (Fd.Name != "." && Fd.Name != ".."))
{ DirListd->Add(delDir + "\\" + Fd.Name);
}
else if(Fd.Name != "." && Fd.Name != "..")
{ FileSetAttr(delDir + "\\" + Fd.Name,faArchive);
DeleteFile(delDir + "\\" + Fd.Name);
}
srResd = FindNext(Fd);
}
FindClose(Fd);
if(DirListd->Count == 0)
{ FileSetAttr(delDir,faArchive);
RemoveDirectory(delDir.c_str());
}
else
{ for(int i = 0; i < DirListd->Count; ++i)
DeleteFolderAll1(DirListd->Strings[i]);
}
delete DirListd;
FileSetAttr(delDir,faArchive);
RemoveDirectory(delDir.c_str());
}




Все вопросы, пожелания и предложения ведущему рассылки, прошу слать на e-mail: urisff@inbox.ru

Все статьи публикуются здесь только с разрешения (или рекомендации) автора.

Если вы хотите опубликовать здесь свою статью, то сделайте это, переслав её мне (желательно в виде html, причём без картинок).

В случае, если вы будете использовать приведённые в этой рассылке материалы, не забудьте сделать ссылку на эту рассылку.

Ведущий рассылки:
Набатников Иван, urisff@inbox.ru
http://www.tireal.com


В избранное