Преобразуйте массив в текстовый файл и сохраните в изолированном хранилище - PullRequest
0 голосов
/ 26 апреля 2011

Я пытаюсь преобразовать все данные в моем массиве в текстовый файл, чтобы прочитать все элементы по одному, сохранить их в изолированном хранилище и отобразить в списке на другой странице.

Я пробовал это, но я сталкиваюсь с ошибкой, заявляющей, что "Операция не разрешена на IsolatedStorageFileStream". Мне нужна помощь в этом, и, пожалуйста, вернись ко мне как можно скорее. Спасибо!

    //save list to favourite list
    private void addListBtn_Click(object sender, RoutedEventArgs e)
    {

        ///////for-loop to access userDrinksList
        //////transform array into textfile, one line for each drink
        ///////write in quantity of file into isolated storage using write line function

        for (int i = 0; i < (Application.Current as App).userDrinksList.Count; i++)
        {

            //Obtain the virtual store for application
            IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication();

            //Create a new folder and call it "ListFolder"
            storage.CreateDirectory("ListFolder");


            //Create a new file and assign a StreamWriter to the store and this new file (myFile.txt)
            //Also take the text contents from the txtWrite control and write it to myFile.txt
           // StreamReader readFile = null;
            StreamWriter writeFile = new StreamWriter(new IsolatedStorageFileStream("ListFolder\\myFile.txt", FileMode.OpenOrCreate, storage));
            StreamReader readFile = new StreamReader(new IsolatedStorageFileStream("ListFolder\\myFile.txt", FileMode.Open, storage));

            string myFile = readFile.ReadToEnd();
            string[] lines = myFile.Split(System.Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);

            //write content inside myFile.txt
            writeFile.WriteLine(myFile); 

            //retrieveDrinksListBox.Items.AddRange(lines); 
            //writeFile.Close();
        }

Ответы [ 2 ]

0 голосов
/ 26 апреля 2011

Исключение, которое вы видите, выдается при попытке чтения из файла, который вы только что открыли для записи:

StreamReader readFile = new StreamReader(new IsolatedStorageFileStream("ListFolder\\myFile.txt", FileMode.Open, storage));

Проблема также в том, что вы никогдазакройте файл, когда прочтете его (хотя в коде вы недостаточно углубились, чтобы у вас возникла проблема).Весь код, который у вас есть, хорош, вам просто нужно изменить его порядок.Попробуйте

StreamReader readFile = new StreamReader(new IsolatedStorageFileStream("ListFolder\\myFile.txt", FileMode.Open, storage));

            string myFile = readFile.ReadToEnd();
            readFile.Close();

            //Create a new file and assign a StreamWriter to the store and this new file (myFile.txt)
            //Also take the text contents from the txtWrite control and write it to myFile.txt
            // StreamReader readFile = null;
            StreamWriter writeFile = new StreamWriter(new IsolatedStorageFileStream("ListFolder\\myFile.txt", FileMode.OpenOrCreate, storage));

            string[] lines = myFile.Split(System.Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);

            //write content inside myFile.txt
            writeFile.WriteLine(myFile);

            //retrieveDrinksListBox.Items.AddRange(lines); 
            writeFile.Close();
0 голосов
/ 26 апреля 2011

Можете ли вы дать немного больше информации о создаваемом исключении?Читая ваш код, похоже, что вы пытаетесь добавить в файл.Вы можете устранить StreamReader, просто установив FileMode на Append во время создания StreamWriter.См. Ниже:

StreamWriter writeFile = new StreamWriter(
    new IsolatedStorageFileStream("ListFolder\\myFile.txt", FileMode.Append, storage));

FileMode.Append либо добавит файл, если он существует, либо создаст новый файл.

Кроме того, я не уверен, что вы предполагали строку writeFile.WriteLine(myFile) для записи myFile вместо того, что хранится в переменной lines (ваши данные).

...