2012-05-16 5 views
7

मैं सोच रहा था कि कोई मुझे बता सकता है कि स्ट्रीमरडर को प्रोग्राम की वर्तमान कार्य निर्देशिका के अंदर फ़ाइल में कैसे इंगित करना है।एक रिश्तेदार फ़ाइलपैथ पर स्ट्रीमर

ईजी। मान लें कि मेरे पास प्रोग्राम प्रोग है, निर्देशिका सी: \ ProgDir में सहेजा गया है। मैं एक साझा फ़ोल्डर में \ ProgDir प्रतिबद्ध करता हूँ। प्रोगोडिर के अंदर एक और निर्देशिका है जिसमें मैं प्रोजे (जैसे \ ProgDir \ TestDir \ TestFile.txt) में आयात करना चाहता हूं, मैं इसे बनाना चाहता हूं ताकि StreamReader उन टेस्टफाइल को पढ़ सके, भले ही निर्देशिका के पथ में बदला हुआ;

(जैसे, अपने कंप्यूटर पर, Testfiles के लिए पथ

C: \ ProgDir \ TestDir \ TestFile.txt

लेकिन अन्य व्यक्ति के कंप्यूटर पर, निर्देशिका

है

C: \ dev_code \ ProgDir \ TestDir \ TestFile.txt

)।

मैं किसी अन्य व्यक्ति के कंप्यूटर पर TestFile.txt से पढ़ने के लिए स्ट्रीमरडर को कैसे प्राप्त करूं? (स्पष्ट करने के लिए, फ़ाइल नाम में परिवर्तन नहीं करते, केवल परिवर्तन पथ ProgDir है)

मैं निम्नलिखित की कोशिश की:

string currentDir = Environment.CurrentDirectory; 
DirectoryInfo directory = new DirectoryInfo(currentDir); 
FileInfo file = new FileInfo(TestFile.txt); 

string fullDirectory = directory.FullName; 
string fullFile = file.FullName; 

StreamReader sr = new StreamReader(@fullDirectory + fullFile); 

(से खींच लिया: Getting path relative to the current working directory?)

लेकिन मुझे मिल रहा है "वर्तमान संदर्भ में टेस्टफाइल मौजूद नहीं है"। किसी के पास कोई विचार है कि मुझे इस बात से कैसे संपर्क करना चाहिए?

धन्यवाद।

+2

आपका शीर्षक आपके प्रश्न से पूरी तरह से असंबंधित दिखता है ... स्टॉपवॉच कहां आती है? –

+0

इसके बारे में क्षमा करें, मुझे लगता है कि शीर्षक किसी भी तरह से मेरे अंतिम प्रश्न से लिया गया है। – gfppaste

उत्तर

10

क्या फ़ोल्डर "testDir" हमेशा निष्पादन योग्य निर्देशिका में है? अगर ऐसा है, इस

string dir =System.IO.Path.GetDirectoryName(
     System.Reflection.Assembly.GetExecutingAssembly().Location); 

    string file = dir + @"\TestDir\TestFile.txt"; 

कोशिश यह आपको exe के रास्ते के साथ साथ इसके अंदर फ़ोल्डर और textfile

7

आप GetFullPath() विधि का उपयोग कर सकते हैं। इस प्रयास करें:

string filePath = System.IO.Path.GetFullPath("TestFile.txt"); 
StreamReader sr = new StreamReader(filePath); 
+0

यह स्ट्रीमreader sr = new StreamReader (filePath) पर तोड़ रहा है; – gfppaste

+0

@gfppaste वह एक टाइपो था। यह Streamreader के बजाय StreamReader है। – Zenadix

2

FileInfoconstructor प्रकार तार का एक एकल पैरामीटर लेता है। TestFile.txt के आस-पास उद्धरण डालने का प्रयास करें।

बदलें

FileInfo file = new FileInfo(TestFile.txt);

FileInfo file = new FileInfo("TestFile.txt");

को जब तक testfile प्रकार स्ट्रिंग की txt नाम के एक संपत्ति है, इस स्थिति में आप के लिए प्रयास करने से पहले वस्तु बनाने के लिए है के साथ एक वस्तु है इसका इस्तेमाल करें।

4

कुछ बातें दे देंगे:

पहले, FileInfo.FullName के लिए निरपेक्ष पथ देता है फ़ाइल, इसलिए आपको StreamReader इंस्टेंस में फ़ाइल से पहले पूर्ण निर्देशिका पथ को प्रीपेड करने की आवश्यकता नहीं है।

दूसरा, FileInfo file = new FileInfo(TestFile.txt); तब तक असफल होना चाहिए जब तक कि आपके पास वास्तव में TestFile नामक कक्षा txt संपत्ति के साथ नहीं होनी चाहिए।

अंत में, लगभग हर File विधि के साथ, वे पहले से ही संबंधित पथ का उपयोग करते हैं। तो आपको केवल संबंधित पाठक पर स्ट्रीम रीडर का उपयोग करने में सक्षम होना चाहिए।

उन कुछ चीजों को आज़माएं और हमें बताएं।

संपादित करें: यहाँ आप क्या प्रयास करना चाहिए है:

FileInfo file = new FileInfo("TestFile.txt"); 
StreamReader sr = new StreamReader(fullFile.FullName); 
//OR 
StreamReader sr = new StreamReader("TestFile.txt"); 

हालांकि, एक बात मैंने देखा है कि testfile TestDir में स्थित है। यदि आपका निष्पादन योग्य ProgDir में स्थित है जैसा कि आप बता रहे हैं, तो यह अभी भी असफल हो जाएगा क्योंकि आपका सापेक्ष पथ सही नहीं है।

इसे बदले में TestDir\TestFile.txt पर बदलने का प्रयास करें। आईई: StreamReader sr = new StreamReader("TestDir\TestFile.txt");