2009-06-19 37 views
7

C# içindeki göreceli yollar benim için harekete geçiyor. Bir örnekte, bir set Texture2d nesnesini benim uygulamamla, dosya ismini alarak ve dosyaları bulmak ve dokuları Görüntü nesnelerine yüklemek için kullanıyorum. Daha sonra sınıf dosyasında saklanan göreceli bir yoldan bir resim yüklerim ve Content/gfx'e göreli olması gereken göreceli bir yol kullanırım. Fakat bu dokuları yüklemediğimde, bu göreceli yollar başarısız olur. Rel yolumun başarısız olmayacağını nasıl anlayabilirim? Web çalışmasında, tüm rel yolları, çalıştığımız dosyanın bulunduğu klasöre göre değişir, bu şekilde ayarlayabilir ve uygulamamın bulunduğu kök klasörün tüm rel yollarını yapabilir miyim? Eğer endişeleriniz varsaWinform'lardaki Göreli Yollar

+0

bu hata ayıklama veya konuşlandırılmış modda mı dosyası nedir? –

cevap

18

İlk olarak göreli yolları kullanmamanızı öneririz.

Göreli yolları mutlak yollara dönüştürmek için Path.Combine kullanın. Örneğin, başlangıç ​​EXE tam yolunu almak için kullanabilir: Bunu sahip olduktan

string exeFile = (new System.Uri(Assembly.GetEntryAssembly().CodeBase)).AbsolutePath; 

, bunu dizin var alabilirsiniz:

string exeDir = Path.GetDirectoryName(exeFile); 

ve mutlak şekilde göreli yol açmak yol:

string fullPath = Path.Combine(exeDir, "..\\..\\Images\\Texture.dds"); 

Bu, göreli yolları kullanmaya çalışmaktan çok daha güvenilir olacaktır.

+0

İlk iki satır için çok, sadece ben arıyordum. Yine de çift ters eğik çizgileri önlemek için üçüncü hatta '@' kullanırdım. – radbyx

+0

Dizimin içinde bir boşluk varsa, yolu bulamıyor, ancak yoksa, iyi çalışıyor. – Xaisoft

1

yürütülebilir dosya olarak ya da bu dizinin bir alt dizinde aynı dizinde olması için bir kaynak bekliyoruz, her zaman

string fullPath = System.IO.Path.Combine(System.IO.Directory.GetCurrentDirectory(), subPath); 

kullanmak en iyisidir ya da çalışma dizini yanlış olabilir: Bunu yapmak için:

0

// [ad boşluk] Eğer Depug içine .-- sizin dosyayı kopyalamak gerekir // ad alanı

 string path = (Assembly.GetEntryAssembly().Location + ""); 
     path = path.Replace("name space", "filename.--"); 


     // [WindowsFormsApplication4] is name space 
     //you should copy your "mysound.wav" into Depug file 

     //example:: 
     string path_sound = (Assembly.GetEntryAssembly().Location + ""); 
     path_sound = path_sound.Replace("WindowsFormsApplication4.exe", "mysound.wav"); 

     SoundPlayer player1 = new SoundPlayer(path_sound); 
     player1.Play();