Thread overview
December 28, 2012

Merhaba yine ben :)

getcwd() ile o anki dizini okuyabiliyorum ama ihtiyacım olan exe nin bulunduğu dizini öğrenmek bunu nasıl yapabiliriz?

mesela exe "c:/a/1.exe" olsun ama çalıştırırken "c:/" adresinden konsol ile çalıştıralım getcwd() deyince "c:/" döndürüyor.

"c:/a/" dizinini nasıl öğrenebilirim?

Teşekkürler.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 28, 2012

İlacın std/path (http://dlang.org/phobos/std_path.html) olabilir...

Gerçi işletim sistemi tarafından, çalışan uygulamanın bulunduğu dizin verirlir mi bilmiyorum! Ama Linux'da which diye bir komut var. Sonuçta işletim sistemine şunu sormalıyız: Ben nerede çalışıyorum...

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 28, 2012

Biraz araştırınca https://bitbucket.org/Abscissa/semitwistdtools/src/8123e04b593c/src/semitwist/util/io.d#cl-168 adresini buldum ve kütüphaneden gerekli kodları aldım

import std.stdio;
import std.conv;

version(Win32)
import std.c.windows.windows;
else version(OSX)
private extern(C) int _NSGetExecutablePath(char* buf, uint* bufsize);
else
import std.c.linux.linux;

int main(string[] args){
	writeln(getExec());
	while(1){}
   return 0;
}
string getExec()
{
	auto file = new char[4*1024];
	size_t filenameLength;
	version (Win32)
		filenameLength = GetModuleFileNameA(null, file.ptr, file.length-1);
	else version(OSX)
	{
		filenameLength = file.length-1;
		_NSGetExecutablePath(file.ptr, &filenameLength);
	}
	else
       filenameLength = readlink(toStringz(selfExeLink), file.ptr, file.length-1);

	//auto fp = new FilePath(file[0..filenameLength]);
	return to!string(file[0..filenameLength]);
	//      return getExecFilePath().toString().trim();
}

Ama bu şekilde olması beni hayal kırıklığına uğrattı doğrusu c fonksiyonu çağırıyoruz. Direkt olarak bir fonksiyon olmaması üzücü.

Zekeriya

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 28, 2012

Ben bilmiyorum.

Şu program PATH ortam değişkenini de kullanarak buluyor:

http://h21007.www2.hp.com/portal/site/dspp/menuitem.863c3e4cbcdc3f3515b49c108973a801?ciid=88086d6e1de021106d6e1de02110275d6e10RCRD

Şuradaki bir program da bunun Windows'da GetModuleHandle() ile yapılabildiğini söylüyor:

http://stackoverflow.com/questions/1528298/get-path-of-executable

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 30, 2012

Aslında std/file sınıfı içindeki bir çok işlev bu şekilde. Buna sarma (kapsülleme) mı diyorlar emin değilim ama istersek kendi dosya sınıfımızı yazabiliriz...:)

Sizce buna gerek var mı? Yani bize özel neler katabiliriz ki dosya sınıfı daha kullanışlı olsun; bir düşünelim...

Gerçi miras almada yapılabilir çünkü bu sınıfı çok seviyorum. Ama std/stdio ile bazı bağları olması benim biraz kafamı karıştırıyor. Hatta std/path bile bence kafa karıştırıcı; niye birleştirmemişler ki! Hatta std/stdio'nun çok şişirildiğini de düşürüm. Her zaman dosya okuma/yazma işlemleri yapar mıyız? Yoooo...:D

Yazdığım bir paragraf boyunca düşündüm ama belki de çözümü olabileceği için denemek gerekiyor:

  • Sıkıştırılmış geçici bir dosya açsın ve biz onun içine herhangi bir dosyayı yazar gibi istediğimiz sayıda dosya yazıp silelim!
  • Yazılan dosyaların özellikleri (attributes) ile kaynaşmış bir de basit ve zorlu şifreleme seçenekleri olsun...
  • Parçalı dosya kaydetme seçenği de hoş olabilir, biz tek bir dosya gibi erişelim...:)

Aslında yukarıdakiler çok özelleşmişler ve kendimi adeta WinZIP programı yazar gibi hissetmeye başladım. Belki de bu kadar karıştırmamalı. Çalıştırılan dosyanın bulunduğu dizini öğrenme gibi temel bilgiler çok daha önemli olsa gerek. Peki sizce basit bir kaç özellik eklenebilir mi?

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 30, 2012

Programlama dili CGI ile çalışıyor ve c:/inetpub/wwwroot dizini program için ana dizin olarak belirtiliyor. Ama dilin dışarıda bıraktığı kütüphaneler ve dil dosyaları var. Eğer exe nin bulunduğu dizini bilmezsem c:/inetpub/wwwroot dizini içerisinde dil dosyalarını arar ve bu da pek hoş olmuyor çünkü programlama dilini web sitesinin kodlarının olduğu yere kurmaktan farkı olmuyor. Kısacası dil dosyalarını ve diğer dosyaları exe nin bulunduğu dizinden çekmesi gerekiyordu.

Zekeriya

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 30, 2012

Madem Windows üzerinde uygulama geliştiriyorsun, belki register kayıtlarına ulaşman çok hoş olabilir. Bu konuda WinAPI neler veriyor bize bilmiyorum ama öğrenmekte fayda var. Çünkü bir takım ayarları (dizin isimleri gibi) orada barındırabiliyorsun. Tıpkı bir dosya gibi ki yukarıdaki projeye (isim de buldum OburX!) dahil bile edilebilir.

Yani hedef: Windows Register File

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 30, 2012

Dediğiniz gibi, çizgiyi belirli bir yerde çizmek gerek. Standart kütüphane ancak genelin ihtiyacını karşılamalı.

Örneğin EXE'nin bulunduğu dizin benim için hiç önemli olmamıştı. Başkaları için önemli olabildiğini Zekeriya sorunca anladım. Zekeriya, sen neden bilmek istiyorsun? Hangi amaçla kullanıyorsun?

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]