从ACCESS中读取WAV文件的有关问题
从ACCESS中读取WAV文件的问题
FILE *stream;
long lWavSize;
long lIsRead=0;
_variant_t varChunk;
BYTE buf[ChunkSize];
stream=fopen( "d:\\ccc.wav ", "wb ");
lWavSize = m_recordset-> Fields-> Item[ "wav_file "]-> ActualSize
while(lWavSize> 0)
{
lIsRead=lWavSize> =ChunkSize? ChunkSize:lWavSize;
varChunk = m_recordset-> Fields-> Item[ "wav_file "]-> GetChunk(lIsRead);
for(long index=0;index <lIsRead;index++)
{
::SafeArrayGetElement(varChunk.parray,&index,buf+index);
}
fwrite(buf,sizeof(byte),lIsRead,stream);
lWavSize-=lIsRead;
}//while()
fclose(stream);
读出来前文件大小:215KB,读出后大小:218KB,但是用播放器播放不了ccc.wav
------解决方案--------------------
select lenb(wav_file) as bytelen from table1
使用这个来确定一下这个纪录的这个字段字节长度是多少,如果215一致,说明你的循环有问题,如果不一致,有可能是access自己补字节了,需要截取
FILE *stream;
long lWavSize;
long lIsRead=0;
_variant_t varChunk;
BYTE buf[ChunkSize];
stream=fopen( "d:\\ccc.wav ", "wb ");
lWavSize = m_recordset-> Fields-> Item[ "wav_file "]-> ActualSize
while(lWavSize> 0)
{
lIsRead=lWavSize> =ChunkSize? ChunkSize:lWavSize;
varChunk = m_recordset-> Fields-> Item[ "wav_file "]-> GetChunk(lIsRead);
for(long index=0;index <lIsRead;index++)
{
::SafeArrayGetElement(varChunk.parray,&index,buf+index);
}
fwrite(buf,sizeof(byte),lIsRead,stream);
lWavSize-=lIsRead;
}//while()
fclose(stream);
读出来前文件大小:215KB,读出后大小:218KB,但是用播放器播放不了ccc.wav
------解决方案--------------------
select lenb(wav_file) as bytelen from table1
使用这个来确定一下这个纪录的这个字段字节长度是多少,如果215一致,说明你的循环有问题,如果不一致,有可能是access自己补字节了,需要截取