Atrybuty folderów

dział ogólny

Re: Atrybuty folderów

Nowy postprzez Cyfrowy Baron » piÄ…tek, 27 lutego 2009, 10:30

Twój problem polegał na tym, ze definiowałeś względną ścieżkę dostępu, która nie zawsze musi odnosić się do programu, dlatego dobrym zwyczajem jest zawsze definiować bezwzględne ścieżki dostępu względem programu:

String path = ExtractFilePath(Application->ExeName);

ExtractFilePath(String FileName) - funkcja ekstrahuje ścieżkę dostępu z podanej ścieżki do pliku.
Application->ExeName - ścieżka dostępu wraz z nazwą pliku programu

Jeżeli program jest uruchamiany przez IDE (środowisko c++ builder - compile) to funkcja Application->ExeName, może dać nieprawidłową ścieżkę dostępu, nie względem naszego programu, lecz względem środowiska c++ builder (bds.exe), dlatego lepiej jest stosować:

String path = ExtractFilePath(ParamStr(0));
ParamStr(0) - pierwszy parametr aplikacji, zawsze ścieżka dostępu do programu
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

Re: Atrybuty folderów

Nowy postprzez Witold » piÄ…tek, 27 lutego 2009, 12:43

Cyfrowy Baron napisał(a):Jeżeli program jest uruchamiany przez IDE (środowisko c++ builder - compile) to funkcja Application->ExeName, może dać nieprawidłową ścieżkę dostępu, nie względem naszego programu, lecz względem środowiska c++ builder (bds.exe), dlatego lepiej jest stosować:

String path = ExtractFilePath(ParamStr(0));
ParamStr(0) - pierwszy parametr aplikacji, zawsze ścieżka dostępu do programu


Kod: Zaznacz cały
// Forms.pas z BCB6
TApplication = class(TComponent)
  private
// ...
property ExeName: string read GetExeName;
//...
end.

function TApplication.GetExeName: string;
begin
  Result := ParamStr(0); <-------------------------
end;

Avatar użytkownika
Witold
Konstrukcjonista
Konstrukcjonista
 
Posty: 223
Dołączył(a): piątek, 29 sierpnia 2008, 10:53
PodziÄ™kowaÅ‚ : 1
OtrzymaÅ‚ podziÄ™kowaÅ„: 14
Kompilator: bcb6, Turbo C++ Explorer
    NieznanyNieznana

Re: Atrybuty folderów

Nowy postprzez Cyfrowy Baron » piÄ…tek, 27 lutego 2009, 13:48

Co do tego Application->ExeName to w kilku sytuacjach gdy uruchamiałem program w środowisku C++ Builder na etapie programowania otrzymywałem nie ścieżkę dostępu do aplikacji (nie pamiętam już w jakich to było sytuacjach), lecz do C:\Program Files\CodeGear\RAD Studio\5.0\bds.exe, natomiast gdy użyję ParamStr(0) to zawsze otrzymuję ścieżkę dostępu do programu. Pierwszy argument posiadający indeks 0 jest zawsze ścieżką dostępu do programu.
Żeby już nie wyjaśniać o co mi dokładnie chodzi z typ ParamSrtr(0) odsyłam do porady: Przekazywanie do programu argumentów z linii komend

Help c++ builder 2007:

ExeName:

Description
Use ExeName to obtain the name of the executable file for the application. ExeName is the fully-qualified name, including the path to the application's executable.

The name of the application is the root name of the project with an .EXE extension. By default, this name is PROJECT1.EXE. To change the ExeName, save the project by the desired new root name and rebuild the application. ExeName will reflect the change to the project file name.

ExeName is a read-only property.




Możliwe, że wspomniane różnice w zwracanej ścieżce dotyczyły przypadku, gdy uruchamiałem projekt przed zapisaniem go, a na pewno w sytuacjach gdy umieszczałem tą funkcję w komponentach, wtedy mimo iż komponent był dodany do konkretnego programu, to na etapie programowania zawsze zwracał mi ścieżkę dostępu do pliku bds.exe.
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

Re: Atrybuty folderów

Nowy postprzez Witold » piÄ…tek, 27 lutego 2009, 15:35

Cyfrowy Baro napisał(a):Co do tego Application->ExeName to w kilku sytuacjach gdy uruchamiałem program w środowisku C++ Builder na etapie programowania otrzymywałem nie ścieżkę dostępu do aplikacji (nie pamiętam już w jakich to było sytuacjach), lecz do C:\Program Files\CodeGear\RAD Studio\5.0\bds.exe, natomiast gdy użyję ParamStr(0) to zawsze otrzymuję ścieżkę dostępu do programu.


W jaki sposób to możliwe, gdy Application->ExeName zwraca ParamStr(0) ?
Avatar użytkownika
Witold
Konstrukcjonista
Konstrukcjonista
 
Posty: 223
Dołączył(a): piątek, 29 sierpnia 2008, 10:53
PodziÄ™kowaÅ‚ : 1
OtrzymaÅ‚ podziÄ™kowaÅ„: 14
Kompilator: bcb6, Turbo C++ Explorer
    NieznanyNieznana

Re: Atrybuty folderów

Nowy postprzez Cyfrowy Baron » piÄ…tek, 27 lutego 2009, 20:24

Nie wiem, ale to fakt, problem występował w środowisku Borland C++ Builder 6 Enterprise.
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

Re: Atrybuty folderów

Nowy postprzez Witold » sobota, 28 lutego 2009, 02:06

Cyfrowy Baron napisał(a):Nie wiem, ale to fakt, problem występował w środowisku Borland C++ Builder 6 Enterprise.

Sprawdziłem pod BCB6 Enterprise: Application->ExeName i ParamStr(0) "umieszczone w komponencie" zwróciły to samo -> "C:\Program Files\Borland\CBuilder6\Bin\bcb.exe".
Avatar użytkownika
Witold
Konstrukcjonista
Konstrukcjonista
 
Posty: 223
Dołączył(a): piątek, 29 sierpnia 2008, 10:53
PodziÄ™kowaÅ‚ : 1
OtrzymaÅ‚ podziÄ™kowaÅ„: 14
Kompilator: bcb6, Turbo C++ Explorer
    NieznanyNieznana

Poprzednia strona

  • 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 9 gości