moderasura napisał(a):Można jeszcze tak zapisać z folderami i podfolderami może komuś sie przyda
Tak jak zapisałeś nie jest dobrze. Okno OpenDialog wywołuje się funkcją Execute, a FileName nie zawiera nazwy katalogu lecz ścieżkę dostępu do pliku, więc nie można tworzyć folderu poprzez dodanie do FileName kolejnych ścieżek, gdyż np.
FileName = c:\nazwapliku.exe
gdy dodasz: sciezka+"\\folder\\folder2 otrzymasz:
c:\nazwapliku.exe\folder\folder2
Poza tym pomyliłem się w swoim ostatnim poście i do wypakowania pliku należy posłużyć się nie OpenDialog lecz SaveDialog, czyli:
if( SaveDialog1->Execute() )
{
ExtractExe(ID_APPL, SaveDialog1->FileName);
}
Zauważ, że po wywołaniu okna SaveDialog można w nim tworzyć nowe katalogi, więc takie sztuczne definiowanie katalogu nie ma sensu, chyba że chcesz wymusić w podanej lokalizacji utworzenie kolejnych katalogów. W takiej sytuacji należy posłużyć się oknem do wybierania katalogów a nie plików:
#include "FileCtrl.hpp"
void __fastcall TForm2::Button1Click(TObject *Sender)
{
String Dir; /* można nadać ścieżkę początkową, np: String Dir = "c:\\program files"; */
if( SelectDirectory( Dir, TSelectDirOpts() << sdAllowCreate << sdPerformCreate << sdPrompt, NULL ) )
{
if( ForceDirectories( Dir + "\\folder\\folder2" ) )
{
ExtractExt( ID_APPL1, Dir + "\\folder\\folder2\\plik.dat");
}
else
{
Application->MessageBox( ("Nie udało się utworzyć podkatalogu w katalogu '" + Dir + "'.").c_str(), "Błąd tworzenie podkatalogu", MB_OK | MB_ICONSTOP);
return;
}
}
}
Dopiero tak jest poprawnie.