locked
Ошибка при записи в файл RRS feed

  • Вопрос

  • Не пойму в чем дело, стандартный код по работе с файлами взял за основу из книги по Win8 (Windows 8 для  C# разработчиков).

    Сохранение происходит без заминки:

            public static async void WriteFile(string FileName, string StringToWrite)
            {
                StorageFolder current = ApplicationData.Current.LocalFolder;
                StorageFile file = await current.CreateFileAsync(FileName, CreationCollisionOption.ReplaceExisting);
                IRandomAccessStream writeStream = await file.OpenAsync(FileAccessMode.ReadWrite);
                IOutputStream outputStream = writeStream.GetOutputStreamAt(0);
                DataWriter dataWriter = new DataWriter(outputStream);
                dataWriter.WriteString(StringToWrite);
                await dataWriter.StoreAsync();
                await outputStream.FlushAsync();
    
                if (OnFileWrite != null)
                {
                    OnFileWrite(new FileWriteEventArgs(FileName, StringToWrite));
                }
            }

    А вот прочитать сохраненный стринг - проблема, в этом коде:

            public static async void ReadFile(string FileName, string ReadedFileStr)
            {
                ReadedFileStr = "";
    
                try
                {
                    StorageFolder current = ApplicationData.Current.LocalFolder;
                    StorageFile sampleFile = await current.GetFileAsync(FileName);
                    IRandomAccessStream readStream = await sampleFile.OpenAsync(FileAccessMode.Read);
                    IInputStream inputStream = readStream.GetInputStreamAt(0);
                    DataReader dataReader = new DataReader(inputStream);
                    string myString = dataReader.ReadString((uint)readStream.Size);
                    //ReadedFileStr = myString;
    
                    if (OnFileRead != null)
                    {
                        OnFileRead(new FileReadEventArgs(FileName, myString));
                    }
                }
                catch (Exception ex)
                {
                    string s = ex.Message;
                }
                //return myString;
            }

    В строчке

    string myString = dataReader.ReadString((uint)readStream.Size);

    программа выдает вот такой exception:

    Сведения WinRT: Операция выполнила попытку доступа к данным вне допустимого диапазона

    Дополнительные сведения: Операция выполнила попытку доступа к данным вне допустимого диапазона

    Файл однозначно корректен и расположен в C:\Users\Kutcher\AppData\Local\Packages\GUID

    В качестве параметра FileName в методе чтения и записи указываю "test.txt"

    Помогите разобраться.

    5 декабря 2012 г. 23:46

Ответы

  • Добрый день.

    Чтение строки из файла, можно реализовать вот так:

    tbTextFromFile.Text = await FileIO.ReadTextAsync(source, UnicodeEncoding.Utf8);

    Где source, экземпляр класса StorageFile.

    Примеры по работе с файлами можете посмотреть здесь.

    • Помечено в качестве ответа Kutcher 6 декабря 2012 г. 18:20
    6 декабря 2012 г. 7:17
    Отвечающий

Все ответы

  • Добрый день.

    Чтение строки из файла, можно реализовать вот так:

    tbTextFromFile.Text = await FileIO.ReadTextAsync(source, UnicodeEncoding.Utf8);

    Где source, экземпляр класса StorageFile.

    Примеры по работе с файлами можете посмотреть здесь.

    • Помечено в качестве ответа Kutcher 6 декабря 2012 г. 18:20
    6 декабря 2012 г. 7:17
    Отвечающий
  • Спасибо, Алексей. Ваш пример очень помог, все работает!
    6 декабря 2012 г. 18:20