从结构化存储流中写入数据并写入时出现问题 [英] Problem in Reading Data from stream of Structured Storage and writting

查看:71
本文介绍了从结构化存储流中写入数据并写入时出现问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试从结构化存储(.stg)中读取数据,在该结构中,我已将文件(stream)创建为file.txt.
但是,在读取流时,我得到的第一个1024字节是一些垃圾字符,例如ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ".然后读取实际的流(文件)数据.而且我在停止写入操作时遇到了问题.因此,写入数据的新文件的大小为MB,并且仍在增长...
请帮我看看下面的代码....
感谢U

I am trying to read data from Structured Storage(.stg) in which i have created a file(stream) as file.txt.
But while reading the stream i am getting first 1024 bytes as some junk chars like "ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ". then the actual stream(file) data is read. And i have problem while stopping the Write Oprn. So the new file in which data is written has size in MB and still growing...
Plz help me out for following code....
Thank U

// Code
#include "stdio.h"
#include "conio.h"
#include "windows.h"
#include"shobjidl.h"
#include "ole2.h"
#include"objidl.h"
#define BUFFERSIZE 1024

EXTERN_C void wmain()
{
IStorage*    pStorage;
IStream*    pStream;
HRESULT      hr,hr1,hr3;
hr = StgOpenStorageEx(L"E:\\Root2.stg",STGM_READ|STGM_SHARE_DENY_WRITE,STGFMT_DOCFILE,0, NULL, 0,IID_IStorage,(void**)&pStorage);
if(S_OK==hr)
{
  printf("Storage opened........\n");
	hr1=pStorage->OpenStream(L"file.txt",NULL, STGM_READ | STGM_SHARE_EXCLUSIVE,0,&pStream);
	if(hr1==S_OK)
	{
	unsigned char * pBuffer = new unsigned char [BUFFERSIZE];
	HANDLE hFile = CreateFile(L"E:\\sumit2.txt",GENERIC_WRITE,FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
	if(hFile != INVALID_HANDLE_VALUE)
		printf("\n\n\n File created");	
	DWORD dwWrite=0 ;
	ULONG ulRead=0 ;
	do
	{
		hr3=pStream->Read(pBuffer,dwWrite, &ulRead);
		if(hr3==S_OK)
			printf("\t Read Successful");
		WriteFile(hFile, pBuffer, BUFFERSIZE, &dwWrite, NULL);
		if(0 == dwWrite)               // for checking EOF 
			break;
	} while(ulRead = dwWrite);    // also tried with dwWrite==BUFFERSIZE	
		printf("\n\n DONE");		
	CloseHandle(hFile);
	delete [] pBuffer;	
	//------------------------------------------    
	pStream->Release();
	}
	pStorage->Release();
}
_getch();
}

推荐答案

我试图在下面修复您的循环.

I tried to fix your loop below.

EXTERN_C void awmain()
{
  IStorage* pStorage;
  IStream* pStream;
  HRESULT hr,hr1,hr3;
  hr = StgOpenStorageEx(L"E:\\Root2.stg",STGM_READ|STGM_SHARE_DENY_WRITE,STGFMT_DOCFILE,0, NULL, 0,IID_IStorage,(void**)&pStorage);
  if(S_OK==hr)
  {
    printf("Storage opened........\n");
    hr1=pStorage->OpenStream(L"file.txt",NULL, STGM_READ | STGM_SHARE_EXCLUSIVE,0,&pStream);
    if(hr1==S_OK)
    {
      unsigned char * pBuffer = new unsigned char [BUFFERSIZE];
      HANDLE hFile = CreateFile(L"E:\\sumit2.txt",GENERIC_WRITE,FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
      if(hFile != INVALID_HANDLE_VALUE)
        printf("\n\n\n File created");
      DWORD dwWritten=0 ;
      ULONG ulRead=0 ;
      do
      {
        hr3=pStream->Read(pBuffer, BUFFERSIZE, &ulRead);
        if(hr3 != S_OK)
        {
          printf("\t Read failed!\n");
          break;
        }
        if(0 < ulRead)
        {
          if(!WriteFile(hFile, pBuffer, ulRead, &dwWritten, NULL) ||
              (ulRead != dwWritten))
          {
            printf("\t Write failed!\n");
          }
        }
      } while(BUFFERSIZE == ulRead); // if(BUFFERSIZE > ulRead) means end of stream

      printf("\n\n DONE");
      CloseHandle(hFile);
      delete [] pBuffer;
      pStream->Release();
    }
    pStorage->Release();
  }
  _getch();
}


这篇关于从结构化存储流中写入数据并写入时出现问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆