Ścieżkę dostępu do katalogu programu możesz pobrać na cztery sposoby sposoby:
- Kod: Zaznacz cały
String programPath_1 = ExtractFilePath(Application->ExeName); // uzyskamy np. C:\My Project\Program\
String programPath_2 = ExtractFileDir(Application->ExeName); // uzyskamy np. C:\My Project\Program
// polecam jednak raczej ten sposób, nie pamiętam już dlaczego, ale jest pewniejszy
String programPath_3 = ExtractFilePath(ParamStr(0)); // uzyskamy np. C:\My Project\Program\
String programPath_3 = ExtractFileDir(ParamStr(0)); // uzyskamy np. C:\My Project\Program
Teraz jeżeli chcesz wczytać grafikę do Image z podkatalogu, katalogu programu, to możesz to zrobić tak:
- Kod: Zaznacz cały
String file1 = ExtractFilePath(ParamStr(0)) + "images\\obrazek.bmp";
Image1->Picture->LoadFromFile(file);
// można też tak:
String file2 = ExtractFileDir(ParamStr(0)) + "\\images\\obrazek.bmp";
Image1->Picture->LoadFromFile(file);
// no i tak, co oczywiste
String file1 = ExtractFilePath(ParamStr(0));
Image1->Picture->LoadFromFile(file + "images\\obrazek.bmp");
// możliwości jest dużo więcej
Wszystkie powyższe przykłady podają ścieżki bezwzględne, co jest pewne i zawsze działa. Przykład ścieżki względnej podany przez
jabu74 też będzie działał, ale tylko do momenty gdy domyślna ścieżka nie ulegnie zmianie, a zmianie ulegnie zawsze gdy np. wywołasz okno OpenDialog i wybierzesz w nim inny katalog lub plik znajdujące się w innym katalogu niż katalog programu, wtedy domyślny katalog programu zostanie zmieniony automatycznie na ten wybrany w OpenDialog. To tylko jeden przykład gubienia względnej ścieżki dostępu, dlatego zawsze powinieneś stosować ścieżkę bezwzględną.
Możesz wzbogacić swój program o kod sprawdzający czy plik znajduje się w podanej lokalizacji:
- Kod: Zaznacz cały
String file = ExtractFilePath(ParamStr(0)) + "images\\obrazek.bmp";
if(FileExists(file))
{
Image1->Picture->LoadFromFile(file);
}
else
{
Application->MessageBox(("Nie odnaleziono pliku '" + file + "'.\nSprawdź czy ścieżka dostępu do pliku jest poprawna").c_str(),
"Brak pliku", MB_OK | MB_ICONSTOP);
}
Więcej znajdziesz