2012-04-03 15 views
22

से शुरू होने वाला पथ मुझे एक साधारण समस्या है। मैं उपयोगकर्ता निर्देशिका में एक फ़ाइल है कि इस तरह दिखता है के लिए एक रास्ता है:सी # खुली फ़ाइल,% userprofile%

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

जब मैं एक फ़ाइल

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

यह त्रुटि थूक क्योंकि वह वर्तमान को %userprofile% जोड़ने की कोशिश के रूप में यह खोलने का प्रयास निर्देशिका, तो यह हो जाता है:

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

मैं इसे कैसे स्वीकार करते हैं कि एक रास्ता %USERPROFILE% के साथ शुरू एक निरपेक्ष, नहीं एक रिश्तेदार पथ है कर सकता हूँ?

पुनश्च: मैं

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 

उपयोग नहीं कर सकते क्योंकि मैं सिर्फ अपने नाम से फ़ाइल को खोलने की जरूरत है। उपयोगकर्ता नाम निर्दिष्ट करता है। यदि उपयोगकर्ता "settings.file" निर्दिष्ट करता है, तो मुझे प्रोग्राम dir से संबंधित फ़ाइल खोलनी होगी, यदि उपयोगकर्ता %USERPROFILE% से शुरू होने वाला पथ निर्दिष्ट करता है या कुछ अन्य चीज जो C: \ something में परिवर्तित होती है, मुझे इसे भी खोलने की आवश्यकता है!

उत्तर

45

इसका उपयोग करने से पहले पथ पर Environment.ExpandEnvironmentVariables का उपयोग करें।

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

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

क्यों न केवल 'पर्यावरण। गेटफोल्डरपैथ (पर्यावरण। विशेष फ़ोल्डर। लोकल एप्प्लिकेशनडाटा) '? –

+1

क्योंकि यह अधिक सामान्य है - आप मानते हैं कि पारित पर्यावरण चर हमेशा '% USERPROFILE%' होगा - यदि यह कुछ और है तो क्या होगा? (जो प्रश्न पूछ रहा है - यह पर्यावरण चर का विस्तार करने के बारे में पूछ रहा है - उदाहरण के लिए उपयोग किया गया उदाहरण उपयोगकर्ता प्रोफ़ाइल आकस्मिक है)। – Oded

+0

आह, मैं देखता हूं। खराब उदाहरण ओपी ने –

5

उपयोग Environment.ExpandEnvironmentVariables स्थिर विधि:

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

स्ट्रीम के लिए 'उपयोग' कथन का उपयोग करना न भूलें। – Oded

-1

आप Environment.Username निरंतर भी उपयोग कर सकते हैं। %USERPROFILE% और यह पर्यावरण चर दोनों समान हैं (जो वर्तमान में लॉग इन उपयोगकर्ता है)। लेकिन अगर आप इस तरह से चुनते हैं, तो आपको अपने आप को पथ को जोड़ना होगा।

+1

ठीक है, थोड़ा अंतर है, मैं क्या भूल गया। पर्यावरण चर का अर्थ है "सी: \ उपयोगकर्ता \ {उपयोगकर्ता नाम}" जबकि अन्य केवल "{उपयोगकर्ता नाम}" – NeverJr

+4

नहीं। उपयोगकर्ता नाम उपयोगकर्ता प्रोफ़ाइल फ़ोल्डर नाम के समान नहीं हो सकता है, कृपया इसे न मानें। (विचार करें कि फ़ोल्डर पहले से मौजूद है और उसी नाम का एक नया उपयोगकर्ता बनाया जा रहा है - विंडोज एक नया फ़ोल्डर नाम चुनेंगे) – HelloSam

0

मैं इसे अपनी उपयोगिता पुस्तकालय में उपयोग करता हूं।

using System; 
namespace Utilities 
{ 
    public static class MyProfile 
    { 
     public static string Path(string target) 
     { 
      string basePath = 
Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + 
@"\Automation\"; 
      return basePath + target; 
     } 
    } 
} 

तो मैं बस उदाहरण का उपयोग कर सकता हूं "स्ट्रिंग testBenchPath = MyProfile.Path (" TestResults ");"

संबंधित मुद्दे