path bulma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
yastik
Üye
Mesajlar: 71
Kayıt: 01 Ağu 2003 05:26
İletişim:

path bulma

Mesaj gönderen yastik »

programın çalıştığı klasörün bi üst klasöründeki başka bir klasörü tam yoluyla nasıl alabilir.
Örnek:
ben "...yol\program\program.exe" deyim fakat "...yol\rapor\a.rpr" un tam yolunu öğrenmek istiyorum.

"...yol" u öğrensem yeter bana.
ALi ÇELİK
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

Merhaba.
String parçalama fonksiyonları en kısa çözüm olur diye düşünüyorum.Sılaç işaretine kadar sildiğinizde istediğiniz path ortaya çıkar sanırım.
Kolay gelsin.
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

GetCurrentliDir ile exenin olduğu klasörü bulabilirsin.
Ama dikkat etmen gereken bir husus vari program çalıştığı sırada diyelim ki bir opendialog kullandın ve farklı bir klasör seçtin ozaman GetCurrentliDir in getirdiği yer en sonra seçtiğin klasör olacaktır.
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

Exenin bulunduğu klasör;

Kod: Tümünü seç

ExtractFilePath (Application.ExeName);
open dialog ya da harici bir şekilde güncel klasör değişmesinden ektilenmeden bulunabilir sanırım.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7604
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

ExctractFilePath(Application.ExeName);

CurrentDir - bazı durumlarda değişebiliyor, bence pek sağlıklı bir yol değil. Ama Application.ExeName her zaman tam yolu ve tam ismi verir.

Kolay gelsin.
Kullanıcı avatarı
yastik
Üye
Mesajlar: 71
Kayıt: 01 Ağu 2003 05:26
İletişim:

bi üst lütfen :)

Mesaj gönderen yastik »

teşekkür ederim

Fakat, ben exe min çalıştığı mevcut klaasör yerine bi üst klasörün içindeki başka klasöre ulaşmak istiyorum. Path deki fazlalığı nasıl keserim?

Saygılar,
ALi ÇELİK
Kullanıcı avatarı
mucar
Kıdemli Üye
Mesajlar: 247
Kayıt: 17 May 2005 01:14

Mesaj gönderen mucar »

Biraz dallama bi yolla oldu ama ilk aklıma bu geldi

Kod: Tümünü seç

 
procedure TForm1.Button1Click(Sender: TObject);
var pathilkhal,pathsonhal,ters:string;   i:integer;
begin

pathilkhal:=ExtractFilePath(Application.ExeName);
 ShowMessage(pathilkhal);
for  i:=1  to length(pathilkhal)  do
begin
ters:=copy(pathilkhal,i,1)+ters;
next;
end;

delete(ters,1,1);
delete(ters,1,pos('\',ters));

for  i:=1  to length(ters)  do
begin
pathsonhal:=copy(ters,i,1)+pathsonhal;
next;
end;
ShowMessage(pathsonhal);
end;
"Evine bakmaktan aciz olan; ilerici, üç kıtaya hükmeden ecdadın mı gerici?"
Kullanıcı avatarı
yastik
Üye
Mesajlar: 71
Kayıt: 01 Ağu 2003 05:26
İletişim:

Mesaj gönderen yastik »

cok espirili bir cevap, sağol :)
ALi ÇELİK
t-hex
Kıdemli Üye
Mesajlar: 531
Kayıt: 18 Mar 2005 02:45
Konum: İstanbul/Antalya
İletişim:

Mesaj gönderen t-hex »

Şöyle bir yöntem de var:
Mesela program C:\DENEME\PROGRAM klasöründe çalışıyor
siz C:\DENEME\RAPOR klasörüne ulaşmak istiyorsunuz:

o zaman
C:\DENEME\PROGRAM\..\RAPOR diye tanımlayarak ulaşabilirsiniz bu klasöre, string parçalama ile uğraşmanıza gerek kalmaz. Çünkü:

..\ (Parent directory, Bir üst klasör), .\ ise (Current Directory, Halihazırdaki klasör) ile eş değer anlamdadır.
Kullanıcı avatarı
mucar
Kıdemli Üye
Mesajlar: 247
Kayıt: 17 May 2005 01:14

Mesaj gönderen mucar »

t-hex'in yöntemi çok daha pratik ve kullanışlı. ilk çözümü salla :lol:. ..\'i baş tarafa yazmak aklıma gelmişti de sonuna yazmayı denememiştim. bi şey daha öğrendik bu sayede
"Evine bakmaktan aciz olan; ilerici, üç kıtaya hükmeden ecdadın mı gerici?"
Kullanıcı avatarı
yastik
Üye
Mesajlar: 71
Kayıt: 01 Ağu 2003 05:26
İletişim:

Mesaj gönderen yastik »

..\ kabul görmüyor o yüzden tüm yolu yazmak gerek
ALi ÇELİK
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Merhaba,
Mucar arkadaşımızın örneğini şu şekilde de yapabiliriz. ReverseString için uses kısmına StrUtils satırını eklemeyi unutmayın.

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
a:string;
begin
        a:=extractfilepath( application.exename); // C:\Program Files\Borland\Delphi7\Bin\ şekline gelir.
        showmessage (a) ;
         delete(a,length(a),1); // C:\Program Files\Borland\Delphi7\Bin şekline gelir.

         a:=reversestring(a);   //  niB\7ihpleD\dnalroB\seliF margorP\:C  şekline gelir.

         delete(a,1,pos('\',a));  //  7ihpleD\dnalroB\seliF margorP\:C  şekline gelir.

          a:=reversestring(a);    //  C:\Program Files\Borland\Delphi7 şekline gelir.

          a:=a+'\rapor\a.rpr';     //  C:\Program Files\Borland\Delphi7\rapor\a.rpr   şekline gelir.



end;


İyi çalışmalar.
Kullanıcı avatarı
mucar
Kıdemli Üye
Mesajlar: 247
Kayıt: 17 May 2005 01:14

Mesaj gönderen mucar »

Ofenx teşekkürler ilaven için. Böyle bir fonksiyonun olduğunu tahmin etmiştim ama kodu çıkaramamıştım. Tşk...
"Evine bakmaktan aciz olan; ilerici, üç kıtaya hükmeden ecdadın mı gerici?"
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

Kod: Tümünü seç

filename1 := IncludeTrailingBackslash(ExtractFilePath(Application.ExeName))+DEFAULTBACKUPDIR+GetZipFilename;
.-.-.-.-.-.-.-. ^_^
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Merhaba,
Bugün ipuçlarında gördüğüm bir fonksiyon ile bunu daha zahmetsiz elde edebiliyoruz.
Yukarıdaki verdiğim örneği aşağıdaki gibi de yapabiliriz.

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
a:string;

begin
  

        a:=extractfilepath( application.exename); // C:\Program Files\Borland\Delphi7\Bin\ şekline gelir.

        a:=excludetrailingpathdelimiter(a);  // C:\Program Files\Borland\Delphi7\Bin şekline gelir.

        a:=ExtractFilePath(a);  // C:\Program Files\Borland\Delphi7\ şekline gelir.

         a:=a+'rapor\a.rpr';     //C:\Program Files\Borland\Delphi7\rapor\a.rpr   şekline gelir.
        showmessage (a) ;


end;

ExcludeTrailingPathDelimiter fonksiyonu en sondaki slash karakterini siliyor.

Kolay gelsin.
Cevapla