मैं अपने Xamarin.Android-application के लिए किसी प्रकार की बाहरी कॉन्फ़िग फ़ाइल लिखने का प्रयास कर रहा हूँ। बस .txt और इसमें केवल कई तार होने चाहिए, इसलिए कोई रॉकेट विज्ञान नहीं ^^

जैसे (नमूना लक्ष्य/उम्मीद है कि पाठ फ़ाइल की अंतिम सामग्री :)

[TestSection]
test=12345

मैंने इसे एक ट्यूटोरियल और निम्नलिखित कोड के साथ करने की कोशिश की:

//This code snippet is one example of writing a string to a UTF-8 text file and into the internal storage directory of an application:
public void SaveSomethingIntoExternalTextFile(string toWrite)
{
    var backingFile = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "config.txt");
    using (var writer = System.IO.File.CreateText(backingFile))
    {
        writer.WriteLine(toWrite);
    }
}

लेकिन दुर्भाग्य से इसका कोई असर नहीं होता। चूंकि मेरा एकमात्र ऐप-विशिष्ट पथ है

Phone\Android\data\com.<company_name>.<application_name>\files

उपरोक्त कोड चलाने के बाद मुझे वहां कोई फ़ाइल नहीं मिल रही है। और यहां तक ​​​​कि अगर मैं दिए गए पथ में कंप्यूटर के साथ एक नई फ़ाइल बनाता हूं, इसे लिखित (config.txt) नाम दें और दिए गए कोड को फिर से चलाएं, फिर भी कुछ नहीं होता है (इसलिए स्ट्रिंग जो पैरामीटर के रूप में विधि में दुर्भाग्य से पारित नहीं है कोशिश के अनुसार उस फ़ाइल में लिखा गया)।

पूर्णता के लिए, मेरा परीक्षण आवेदन बहुत आसान है:

protected override void OnCreate(Bundle bundle)
{
    base.OnCreate(bundle);
    SaveSomethingIntoExternalTextFile("[TestSection]");
    SaveSomethingIntoExternalTextFile("test="+12345);
}

क्या कोई शायद मदद कर सकता है? मैं क्या गलत कर रहा हूं?

हर उत्तर के बारे में वास्तव में खुशी होगी, अग्रिम धन्यवाद और

सादर

पुनश्च: अगर मैं कंप्यूटर द्वारा उत्पन्न टेक्स्ट फ़ाइल खोलता हूं, भले ही फ़ाइल निर्देशिका में यह सही ढंग से प्रदर्शित हो, फ़ाइल का शीर्षक config[1].txt कहता है, फिर से config[2].txt खोलना और इसी तरह। या इससे कोई फर्क नहीं पड़ता/उपर्युक्त मेरे प्रयास से कोई लेना-देना नहीं है?

0
Sam 23 जुलाई 2019, 13:32

2 जवाब

सबसे बढ़िया उत्तर

यदि आप System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal) का उपयोग करते हैं, तो पथ इस प्रकार है

/डेटा/डेटा/App3.App3/files/config.txt

इसका अर्थ है कि आप इसे आंतरिक संग्रहण में सहेजते हैं, आप रूट अनुमति के बिना इसे नहीं देख सकते, यदि आप इसे देखना चाहते हैं, तो आप इसे बाहरी मेमोरी.

 public void SaveSomethingIntoExternalTextFile(string toWrite)
    {

        string path = Android.App.Application.Context.GetExternalFilesDir(null).ToString();
        string filepath = Path.Combine(path, "text.txt");
        using (var writer = System.IO.File.CreateText(filepath))
        {
            writer.WriteLine(toWrite);
        }
    }

पथ की तरह:

/storage/emulated/0/Android/data/App3.App3/files/text.txt

0
Cherry Bu - MSFT 29 जुलाई 2019, 12:22

ठीक है डिबगिंग के माध्यम से, मुझे पता चला कि वास्तव में वह मूल्य लिखता है, कम से कम मैं इसे निम्नलिखित फ़ंक्शन के साथ पुनर्प्राप्त कर सकता हूं (मैंने अपने ट्यूटोरियल में मान के प्रकार को पूर्णांक में बदल दिया है (https://docs.microsoft. com/de-de/xamarin/android/platform/files/index#reading-or-writing-to-files-on-internal-storage ) यह पूर्णांक भी था):

    //This code snippet provides one way to read an int value that was stored in a text file:
    public int ReadSomethingFromTextFile()
    {
        var backingFile = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "config.txt");

        if (backingFile == null || !System.IO.File.Exists(backingFile))
        {
            return 0;
        }

        int count = 0;
        using (var reader = new StreamReader(backingFile, true))
        {
            string line;
            while ((line = reader.ReadLine()) != null)
            {
                if (int.TryParse(line, out var newcount))
                {
                    count = newcount;
                }
            }
        }
        return count;
    }

फिर भी, मुझे लिखित फ़ाइल नहीं मिल रही है। क्या पथ System.Environment.SpecialFolder.Personal सही है? या यह रूट डायरेक्टरी की ओर इशारा करता है, जहां मैं हमेशा किसी न किसी तरह के यूजर फोल्डर की तलाश में रहता हूं?

क्योंकि डिबगर के साथ देखते समय backingFile के अंदर क्या है, यह है /data/data/com.<company_name>.<application_name>/files/config.txt, और जैसा कि उपरोक्त पोस्ट में लिखा गया है, एक्सप्लोरर के माध्यम से मैं केवल ऐप-विशिष्ट पथ तक पहुंच सकता हूं Phone/Android/data/com.<company_name>.<application_name>/files.

मैंने इस पथ तक पहुँचने में सक्षम होने के लिए अपने फ़ोन को रूट करने के बारे में कुछ पढ़ा है? कोई मतलब नहीं है ना? क्या कोई साझा फ़ोल्डर (/ पथ) नहीं है, जो न केवल एप्लिकेशन/ऑपरेटिंग सिस्टम बल्कि बाहर से भी पहुंच योग्य है?

0
Sam 23 जुलाई 2019, 18:07