2012-04-03 13 views
22

Basit bir sorunum var. Bunun akımına %userprofile% eklemeye çalışır çünkü hatayı tükürür bir dosyaC# açık dosya,% userprofile ile başlayan yol%

ostream = new FileStream(fileName, FileMode.Open); 

olarak açmaya çalıştığınızda

%USERPROFILE%\AppData\Local\MyProg\settings.file 

: Şöyle kullanıcı dizininde bir dosyaya bir yol var dizin, bu nedenle olur:

C:\Program Files\MyProg\%USERPROFILE%\AppData\Local\MyProg\settings.file 

Nasıl bu %USERPROFILE% ile başlayan bir yol mutlak değil göreli bir yoldur olduğunu kabul yapabilirim?

Not: Ben sadece adıyla dosyayı açmak gerekir Çünkü

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 

kullanamaz. Kullanıcı adı belirler. Kullanıcı "settings.file" belirtirse, kullanıcı %USERPROFILE% ile başlayan bir yol belirtirse veya C: \ bir şeye dönüştüren başka bir şey belirtirse, program yönüne göre bir dosya açmam gerekiyor, ben de açmalıyım!

cevap

45

Kullanmadan önce yolda Environment.ExpandEnvironmentVariables kullanın.

var pathWithEnv = @"%USERPROFILE%\AppData\Local\MyProg\settings.file"; 
var filePath = Environment.ExpandEnvironmentVariables(pathWithEnv); 

using(ostream = new FileStream(filePath, FileMode.Open)) 
{ 
    //... 
} 
+0

Neden "Environment.GetFolderPath (Environment.SpecialFolder.LocalApplicationData)" değil? –

+1

Bu daha genel olduğu için - ortam değişkeninin iletildiğinin her zaman "% USERPROFILE%" olacağını varsayıyorsunuz - başka bir şey ise? (soruyu soran budur - bu, ortam değişkenini genişletmeyi sormaktadır - kullanılan örnek, kullanıcı profilinin tesadüfi olmasıdır). – Oded

+0

Ahh, anlıyorum. Hatalı örnek OP –

5

Kullanım Environment.ExpandEnvironmentVariables statik yöntemi:

string fileName= Environment.ExpandEnvironmentVariables(fileName); 
ostream = new FileStream(fileName, FileMode.Open); 
+1

verdi. Akış için 'using' ifadesini kullanmayı unutma. – Oded

-1

Environment.Username sabitini de kullanabilirsiniz. Her ikisi de %USERPROFILE% ve bu Ortam değişkeni aynıdır (şu anda oturum açmış olan kullanıcı). Fakat bu yolu seçerseniz, yolu kendiniz birleştirmelisiniz.

+1

Tamam, unuttuğum küçük bir fark var. Ortam değişkeni "C: \ Users \ {username}" anlamına gelirken, diğer sadece "{username}" – NeverJr

+4

Hayır. Kullanıcı adı, kullanıcı profili klasör adıyla aynı olmayabilir, lütfen bunu varsaymayın. (Klasörün zaten mevcut olduğunu ve aynı isimde yeni bir kullanıcının oluşturulduğunu düşünün - Windows yeni bir klasör adı seçecektir) – HelloSam

0

Bunu, Yardımcı Programlar kitaplığımda kullanıyorum. Bu yüzden, sadece ör. "string testBenchPath = MyProfile.Path (" TestResults ");"

İlgili konular