प्रोजेक्ट की रूट डायरेक्टरी में टेक्स्ट फाइल कैसे पढ़ें?


92

मैं एक पाठ फ़ाइल की पहली पंक्ति को पढ़ना चाहता हूं जिसे मैंने अपने प्रोजेक्ट के रूट डायरेक्टरी में जोड़ा है। मतलब, मेरी सॉल्यूशन एक्स्प्लोरर .txt फाइल को साइड में दिखा रही है। मेरे प्रोजेक्ट में .cs फाइलें।

तो, मैंने करने की कोशिश की:

TextReader tr = new StreamReader(@"myfile.txt");
string myText = tr.ReadLine();

लेकिन यह काम नहीं करता है क्योंकि यह बिन फोल्डर का जिक्र है और मेरी फाइल नहीं है ... मैं यह काम कैसे कर सकता हूं? : /

धन्यवाद


btw, StreamReader का नाम थोड़ा भ्रमित करने वाला है, Microsoft को मेरी राय में उस TextStreamReader का नाम रखना चाहिए था
जॉर्ज बिरबिलिस

जवाबों:


140

समाधान एक्सप्लोरर से, myfile.txt पर राइट क्लिक करें और "गुण" चुनें

वहाँ से, सेट Build Actionकरने के लिए content और Copy to Output Directoryकरने के लिए या तो Copy alwaysयाCopy if newer

यहाँ छवि विवरण दर्ज करें


2
मैं नहीं बल्कि इस फ़ाइल को अपने उपयोगकर्ताओं के संपर्क में होना चाहिए ... क्या इसे dll में एम्बेड करने और वहां से इसे पढ़ने का कोई तरीका है?
foreyez

3
@foreyez, फ़ाइल के उपयोग के बजाय, संसाधन के रूप में अपनी परियोजना में स्ट्रिंग जोड़ें, शायद। नोट डेटा अप्राप्य नहीं होगा - इस फाइल में कितना संवेदनशील डेटा है?
दान जे

5
करने के लिए निर्माण विकल्प सेट करें Embedded Resourceऔर टी कैसे emebedded संसाधन को पढ़ने के लिए पर लेख को पढ़ने के blogs.msdn.com/b/nikola/archive/2008/05/14/...
dance2die

अगर मैं किसी प्रोजेक्ट के लिए सेटअप बनाता हूं तो मैं प्रॉपर्टी के साथ काम नहीं कर पा रहा हूं। क्या इसके लिए कोई और उपाय है?
नील भसीन

35

वेबसाइट परियोजना की मूल निर्देशिका प्राप्त करने के लिए आप निम्नलिखित का उपयोग कर सकते हैं:

String FilePath;
FilePath = Server.MapPath("/MyWebSite");

या आप इस तरह आधार निर्देशिका प्राप्त कर सकते हैं:

AppDomain.CurrentDomain.BaseDirectory

31

अपनी परियोजना में एक संसाधन फ़ाइल जोड़ें (राइट क्लिक प्रोजेक्ट-> गुण-> संसाधन)। जहां यह "स्ट्रिंग्स" कहता है, आप "फाइल" होने के लिए स्विच कर सकते हैं। "संसाधन जोड़ें" चुनें और अपनी फ़ाइल चुनें।

अब आप अपनी फ़ाइल को Properties.Resourcesसंग्रह के माध्यम से संदर्भित कर सकते हैं ।


15
private string _filePath = Path.GetDirectoryName(System.AppDomain.CurrentDomain.BaseDirectory);

उपरोक्त विधि आपको कुछ इस तरह से लाएगी:

"C:\Users\myuser\Documents\Visual Studio 2015\Projects\myProjectNamespace\bin\Debug"

यहाँ से आप System.IO.Directory.GetParent का उपयोग करके पीछे की ओर नेविगेट कर सकते हैं:

_filePath = Directory.GetParent(_filePath).FullName;

1 बार आपको \ बिन में मिलेगा, 2 बार आपको \ _MProjectNamespace पर ले जाएगा, इसलिए यह इस तरह होगा:

_filePath = Directory.GetParent(Directory.GetParent(_filePath).FullName).FullName;

ठीक है, अब आपके पास "C: \ Users \ myuser \ Documents \ Visual Studio 2015 \ Projects \ myProjectNamespace" जैसा कुछ है, इसलिए उदाहरण के लिए अंतिम फ़ाइल को अपने फ़ाइलनाम में संलग्न करें:

_filePath += @"\myfile.txt";
TextReader tr = new StreamReader(_filePath);

आशा करता हूँ की ये काम करेगा।


धन्यवाद, लेकिन _filePath = Path.Combine (_filePath, "myfile.txt"); // स्टाइलिश रूप से :)
फ्रीक्लब

14

आप इसे एम्बेड कर सकते हैं (एक्शन सेट करें Resource) साथ ही, यह है कि इसे वहां से कैसे पुनः प्राप्त करें:

private static UnmanagedMemoryStream GetResourceStream(string resName)
{
    var assembly = Assembly.GetExecutingAssembly();
    var strResources = assembly.GetName().Name + ".g.resources";
    var rStream = assembly.GetManifestResourceStream(strResources);
    var resourceReader = new ResourceReader(rStream);
    var items = resourceReader.OfType<DictionaryEntry>();
    var stream = items.First(x => (x.Key as string) == resName.ToLower()).Value;
    return (UnmanagedMemoryStream)stream;
}

private void Button1_Click(object sender, RoutedEventArgs e)
{
    string resName = "Test.txt";
    var file = GetResourceStream(resName);
    using (var reader = new StreamReader(file))
    {
        var line = reader.ReadLine();
        MessageBox.Show(line);
    }
}

( चार्ल्स द्वारा इस उत्तर से लिया गया कुछ कोड )


3

आपको इस मामले में पूर्ण पथ का उपयोग करना होगा। लेकिन अगर आप CopyToOutputDirectory = CopyAlwaysइसे सेट करते हैं , तो यह काम करेगा जैसा आप कर रहे हैं।


0

इस कोड में आप rootडायरेक्टरी प्रोजेक्ट तक पहुँचते हैं :

 string _filePath = Path.GetDirectoryName(System.AppDomain.CurrentDomain.BaseDirectory);

फिर:

StreamReader r = new StreamReader(_filePath + "/cities2.json"))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.