Ścieżka do pliku

dział ogólny

Ścieżka do pliku

Nowy postprzez Michal-S2 » wtorek, 12 sierpnia 2008, 16:50

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.
Najgorsze nieszczęścia w historii były spowodowane przez idealistów próbujących zmuszać ludzi do tego, "co dla nich dobre"
Bjarne Stroustrup - twórca c++
Avatar użytkownika
Michal-S2
Intelektryk
Intelektryk
 
Posty: 148
Dołączył(a): sobota, 19 lipca 2008, 13:03
Lokalizacja: Gdańsk
PodziÄ™kowaÅ‚ : 1
OtrzymaÅ‚ podziÄ™kowaÅ„: 1
System operacyjny: Windows 7 Professional OEM 64bit
Kompilator: Turbo C++ Explorer
    NieznanyNieznana

Re: Ścieżka do pliku

Nowy postprzez jabu74 - ekspert » wtorek, 12 sierpnia 2008, 17:37

sprobuj

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

pozdrawiam
Avatar użytkownika
jabu74 - ekspert
 
    NieznanyNieznana

Re: Ścieżka do pliku

Nowy postprzez Cyfrowy Baron » wtorek, 12 sierpnia 2008, 19:02

Ś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
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przeglÄ…da forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 14 gości

cron