Strona 1 z 1

Ścieżka do pliku

Nowy postNapisane: wtorek, 12 sierpnia 2008, 16:50
przez Michal-S2
Chciałem załadować z pliku obrazek do TImage.
Kod: Zaznacz cały
Image1->Picture->LoadFromFile("obrazek.bmp");
Udawało mi się to tylko wtedy jak obrazek był w tym samym folderze co program. Chciałbym żeby obrazek był w folderze "images" który znajduje się w tym samym folderze co program. Próbowałem napisać "/images/obrazek.bmp" i "\images\obrazek.bmp", ale za każdym razem wyświetlał się błąd że program nie moze znaleźć pliku.

Re: Ścieżka do pliku

Nowy postNapisane: wtorek, 12 sierpnia 2008, 17:37
przez jabu74 - ekspert
sprobuj

Image1->Picture->LoadFromFile("images\\obrazek.bmp");

pozdrawiam

Re: Ścieżka do pliku

Nowy postNapisane: wtorek, 12 sierpnia 2008, 19:02
przez Cyfrowy Baron
Ś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 ► patrz serwis: Cyfrowy Baron