Форум программистов, компьютерный форум CyberForum.ru

Как правильно писать/считывать бинарные файлы в Windows Store Apps? - Программирование

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Прокси на телефон. Как? http://www.cyberforum.ru/mobile-dev/thread1091075.html
Есть телефон на андроид. Есть симкарта, оформленная на юр.лицо, переданная в пользование физ.лицу. Т.е. доступ к ДЕТАЛИЗАЦИИ сим-карты имеют физ.лицо и юрлицо. На обычной симке только из.лицо имеет доступ к детилизации сим-карты. Как сделать чтобы набор номер 8-920-920-92-92 (например!) шел не так: 8-920-920-92-92 например, так: 8-900-900-30-30*8-920-920-92-92, где 8-900-900-30-30, еще...
Программирование Отзывы Здравствуйте, я бы хотел узнать. Что Вы думаете про mobedu.ru(не реклама). http://www.cyberforum.ru/mobile-dev/thread1089350.html
Выбор языка/движка. нестандарт Программирование
Всем добро. Помогите определиться, приложению требуется кросс дроид, иос, вфон, все приложение будет состоять из видео кусочков со звуком отснятых на камеру, которые будут проигрываться по алгоритмам а зависимости от действий сенсора. в чем вопрос, какой двиг или язык выбрать, для такой ситуации. сам программист любитель, буду нанимать кого-то, поэтому хочеться хотяб знать требования по...
Программирование jQerry или canvas
Всем привет. На данный момент знаю html, javascript, css (из веб). Но для работы мне прийдется учить jQerry и Convas. Проект - платформер, то есть связанно с анимацией. Какой язык лучше сначала выучить, мбсо знанием одного будет легче учить другой или какой-то будет выучить легче. Спс.
Программирование Как нужно писать заголовки? http://www.cyberforum.ru/mobile-dev/thread1067677.html
Дорогие специалисты, помогите пожалуйста! Я не программист, поэтому не знаю как сделать. Мне необходимо написать заголовок 1) для текста и 2) заголовок для окна браузера (title). Могу ли я 1) написать просто: Обзор приложения на Андроид. а 2) <head> <title>Angry Birds - приложение на Android</title> Это правильно? И дальше могу ли просто писать текст?
Программирование Ищу партнера-программиста единомышлиника Всем привет и всех с праздниками! Есть идея и желания разработать программу для изучения иностранных слов для мобильных устройств. Подобных программ тьма-тьмущая. Пересмотрел много таких, но то то не устраивает, то это. Не нашел в них тех функций, которые, считаю, так необходимы и полезны. Сам я инженер по электроники, работаю с программированием микропроцессоров. С написание под мобильные... подробнее

Показать сообщение отдельно
Vl@disl@v
0 / 0 / 0
Регистрация: 17.07.2013
Сообщений: 9

Как правильно писать/считывать бинарные файлы в Windows Store Apps? - Программирование

16.02.2014, 13:37. Просмотров 874. Ответов 0
Метки (Все метки)

Здравствуйте. Раньше, до WinRT, я использовал функции fopen, fwrite, fread и пр., или через потоки ifstream, ofstream. Я мог легко писать n-ое кол-во байт данных любого типа в файл. В WinRT функция fopen для записи не открывает файл. Ладно, вроде как нашел способ. Использую этот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
    auto item = KnownFolders::PicturesLibrary;
 
    auto mas_x = new int32[10];
    for (int i = 0; i < 10; i++)
    {
        mas_x[i] = i;
    }
    auto arr = ref new Array<unsigned char>((unsigned char*)mas_x, 10 * sizeof(int32));
    auto m_istream = ref new InMemoryRandomAccessStream();
    auto dw = ref new DataWriter(m_istream->GetOutputStreamAt(0));
    dw->WriteBytes(arr);
 
    task<unsigned int>(dw->StoreAsync()).then([=](unsigned int)
    {
        return m_istream->FlushAsync();
    }).then([=](bool)
    {
        return item->CreateFileAsync(filename, CreationCollisionOption::ReplaceExisting);
    }).then([=](StorageFile^ storageFile)
    {
        return storageFile->OpenAsync(FileAccessMode::ReadWrite);
    }).then([=](IRandomAccessStream^ new_stream)
    {
        return RandomAccessStream::CopyAsync(m_istream->GetInputStreamAt(0), new_stream->GetOutputStreamAt(0));
    }).then([=](UINT64 copiedBytes)
    {
        dw->DetachStream();
    });
После записи файл действительно имеет объем 40 байт, и в нем, как я надеюсь, хранятся числа от 0 до 9.
дальше пишу метод
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
void ReadFromFile(Platform:: String^ filename)
{
    auto item = KnownFolders::PicturesLibrary;
    task<StorageFile^> getFileTask(item->GetFileAsync(filename));
    getFileTask.then([=](StorageFile^ storageFile)
    {
        task<FileProperties::BasicProperties^> getBasicPropertiesTask(storageFile->GetBasicPropertiesAsync());
        return getBasicPropertiesTask.then([=](FileProperties::BasicProperties^ basicProperties)
        {
            auto size = unsigned int(basicProperties->Size);
            if (size != basicProperties->Size) throw ref new FailureException("Session state larger than 4GB");
            task<IRandomAccessStreamWithContentType^> openReadTask(storageFile->OpenReadAsync());
            return openReadTask.then([=](IRandomAccessStreamWithContentType^ fileStream)
            {
                auto reader = ref new DataReader(fileStream);
                return task<unsigned int>(reader->LoadAsync(size)).then([=](unsigned int count_bytes)
                {
                    auto a = reader->ReadInt32();
                    auto b = reader->ReadInt32();
                    auto c = reader->ReadInt32();
                    auto d = reader->ReadInt32();
                });
            });
        });
    });
}
Во-первых, если запускать эту функцию сразу после предыдущей записи, то часто, почти всегда, вылетает exception: First-chance exception at 0x76CE2EEC in SculptArt.exe: Microsoft C++ exception: Platform::OutOfBoundsException ^ at memory location 0x02C8B238. HRESULT:0x8000000B Операция выполнила попытку доступа к данным вне допустимого диапазона. Как мне кажется, после записи я неправильно закрыл, а может и вообще не закрыл файл, а так как методы асинхронные, то exception вылетает не всегда, особенно, когда по шагам отлаживаю.

Во-вторых, в переменных b, c, d находятся очень большие числа, естественно не соответствуют желаемому диапазону от 0 до 9. Лишь переменная a = 0, как нужно. А если бы я писал данные типа byte, то все было бы нормально.
Как решить эти две проблемы? И вообще как правильно записывать писать/считывать из файла данные типа int, float, double и др.?
Спасибо за помощь.

Добавлено через 8 минут
забыл кое-что:
filename = "save1.txt"
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru