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

не могу считать из потока данные - C++

Восстановить пароль Регистрация
 
Саааня
0 / 0 / 0
Регистрация: 10.08.2011
Сообщений: 9
10.08.2011, 11:25     не могу считать из потока данные #1
Ребят,помогите разобраться.
Вот код.
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <iostream>
#include <Windows.h>
#include <Ole2.h>
#include <Objbase.h>
 
using namespace std;
 
void DecToBin(unsigned int x){ 
   do 
      { 
        if (x%2==0)
        cout<<"0";
        else
        cout<<"1";
        x/=2;
      } while (x>=1);
}
 
//////////////////////////////////////////////////////////////////////////////////
 
int main()
{
    //OLECHAR filename[100];
    //wcscpy_s( filename, L"Storage.xls" );
    const OLECHAR filename[] = L"Storage.xls";
    const WCHAR workbook[] = L"Workbook";
    const WCHAR ctls[] = L"Ctls";
    const WCHAR usernames[] = L"UserNames";
    const WCHAR revlog[] = L"RevisionLog";
    const WCHAR* StreamNames[] = { workbook, ctls, usernames, revlog };
 
    LPSTORAGE pIStorage = NULL;
    LPSTREAM pIStreams[4]; 
    HRESULT rez;
    rez = StgOpenStorage( filename , NULL,  STGM_SIMPLE | STGM_READ | STGM_SHARE_EXCLUSIVE, NULL, 0, &pIStorage );
    if( rez == S_OK )
    {
        cout << "Storage opened successfully" << endl << endl;
        HRESULT rez2;
        for( int i = 0; i < 4; i++ )
        {
            rez2 = pIStorage->OpenStream( StreamNames[i], NULL,  STGM_SHARE_EXCLUSIVE , 0,  &pIStreams[i]);
            if ( rez2 == S_OK )
            {
                cout << "Stream " << (i+1) << " opened successfully"<< endl;
                rez2 = STG_E_ACCESSDENIED;
                HRESULT rez3;
                int *ptr = (int*) malloc( 2*sizeof(int));
                ULONG uCount;
                rez3 = pIStreams[i]->Read(ptr, 2, &uCount);
                if( rez3 == S_OK ) 
                {
                    cout << " Reading datafrom stream "<< i+1 << " successfull" << endl;
                    //cout << " Actually read from stream "<< uCount<< " bytes:" << endl;
                    for ( int k = 0; k < 2; k++ )
                    {
                        //cout << *(ptr+k);
                        DecToBin(*(ptr+k));
                        cout << " " << endl;
                    }
                }
                else cout << "Error read from stream " << endl;
            }
            else cout << "Error open stream "<< i+1 << endl;
        }
    }
    else cout << "Error open storage" << endl;
    return 0;
}
Открываем файл Excel, находим в нем поток workbook и считываем из него первые 32 байт.
первые 16 из них должны составлять запись BOF:

но вот чет числа которые у меня выводятся никак под эту структуру не подходят
Миниатюры
не могу считать из потока данные  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.08.2011, 11:25     не могу считать из потока данные
Посмотрите здесь:

C++ Считать данные
C++ можно ли считать следующий символ из потока
Считать с потока строку в std::wstring C++
C++ Как игнорировать ненужные данные из потока?
Не могу правильно считать данные из потока C++
Считать данные с бд C++
Считать строку с потока C++
Считать данные о ноутбуках с .txt, обрабатывать их и записывать в .bin файл отсортированные данные C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
10.08.2011, 12:33     не могу считать из потока данные #2
Я бы для начала пощупал какие элементы есть в твоём Storage - EnumElements, кроме workbook вообще приведенных тобой Stream-ов не встречал. В экселе есть ещё SummaryInformation, DocumentInformation.

Добавлено через 4 минуты
Немного приземлённо напишу, но Storage или книга считай папка, Streams - файлы, ну вот файл workbook ты открыл, ну так и читай из него все байты для BOF
C++
1
 Read(ptr, sizeof(BOF), &uCount);
, и разбирай их на биты, а не ищи стримы с их условными названиями, котрых нет в книге
Yandex
Объявления
10.08.2011, 12:33     не могу считать из потока данные
Ответ Создать тему
Опции темы

Текущее время: 14:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru