thread içerisinde Aşağıdaki Kodu Çalıştırıyorum
firebird yedek alıyor
Kod: Tümünü seç
String PARAMETRE = " -v -t -user SYSDBA -password masterkey -y C:\\temp\\WOLVOX.log D:\\AKINSOFT\\Wolvox7\\Database_FB\\KARDESLER\\2017\\WOLVOX.FDB C:\\temp\\WOLVOX.FBK";
String FIREBIRD_GBAK ="C:\\Program Files (x86)\\Firebird\Firebird_2_5\\bin\gbak.exe";
wchar_t ANAHTAR[]=L"open";
ShellExecuteW( 0,ANAHTAR,FIREBIRD_GBAK.w_str() ,PARAMETRE.w_str(), NULL, SW_HIDE);
yedeklemeden sonra sıkıştırmak
Kod: Tümünü seç
Form1->DEGISKEN->DOSYA_LISTESI->Clear();
Form1->DEGISKEN->DOSYA_LISTESI->Add( "C:\\temp\\WOLVOX.FBK");
Form1->DOSYA_SIKISTIR("C:\\temp\\.zip", Form1->DEGISKEN->DOSYA_LISTESI );
C:\\temp\\WOLVOX.FBK Dosya Başka Bir işlem tarafından kullanıldığından bu işlem dosyaya erişemiyor hatası veriyor
Yani anladığım
ShellExecuteW(
ta yedekleme sona ermeden sonraki komuta geçiyor
ShellExecuteW işlemini bitirmesini nasıl beklerim
aşadıdaki kod ise sıkıştırma fonksiyonum
Kod: Tümünü seç
Form1 tanımlanmış DOSYA ZİPLEME FONKSİYONUM
String __fastcall TForm1::DOSYA_SIKISTIR(String KAYNAK, TStringList *KOPYALANACAK_DOSYALAR)
{
TZipFile * ZIP = new TZipFile() ;
try
{
try
{
//KOPYALANACAK_DOSYALAR = new TStringList();
Sleep(Form1->DEGISKEN->PROGRAM_BEKLEME_SURESI);
ZIP->Open(KAYNAK,zmWrite) ;
for(int i=0; i < (KOPYALANACAK_DOSYALAR->Count) ;i++)
{
ZIP->Add(KOPYALANACAK_DOSYALAR->Strings[i], KOPYALANACAK_DOSYALAR->Strings[i].SubString( KOPYALANACAK_DOSYALAR->Strings[i].Pos(Form1->BILGISAYAR_ADI_AL()) ,(KOPYALANACAK_DOSYALAR->Strings[i].Length() - KOPYALANACAK_DOSYALAR->Strings[i].Pos(Form1->BILGISAYAR_ADI_AL()))+1)) ;
}
ZIP->Close();
Sleep(Form1->DEGISKEN->PROGRAM_BEKLEME_SURESI);
return "Tamam";
}
catch(Exception *HATA)
{
Form1->HATA->LISTELE("Dosya Sıkıştırma : "+HATA->Message);
return "Dosya Sıkıştırma Hatası : "+HATA->Message;
}
}
__finally
{
ZIP->Free();
}
return "Tamam";
}