お世話になります。
今、フリーで出回っている UNLHA32.DLL を使って書庫ファイルの一覧を
出力するプログラムを組んでいます。
ところが書庫ファイルをオープンする最初からエラーが起きて開けません。
エラーの種類は ERROR_FILE_OPEN です。書庫ファイルが開けない。って。
でも指定した書庫ファイルはフルパス指定ですし、exe のあるフォルダに
移動して相対パス指定でも同じくエラーダイアログが出ます。
一応はマニュアルを読み、使い方は間違っていないはずです。
何が悪いのでしょうか?
#include <time.h>
#include <stdio.h>
#include <windows.h>
#include <unlha32/unlha32.h> // unlha32.lib
// 成功/失敗の定数
#define LHA_OK (0)
#define LHA_ERR (-1)
// メイン関数
int main( void )
{
TCHAR szLZHFile[ 1024 ];
INDIVIDUALINFO ii;
HARC hLHA;
printf( "書庫ファイル名:" );
fgets( szLZHFile, sizeof(szLZHFile), stdin );
printf( "書庫ファイル名:%s\n\n", szLZHFile );
if ( (hLHA = UnlhaOpenArchive(NULL,szLZHFile,M_ERROR_MESSAGE_ON)) != NULL ){
if ( UnlhaFindFirst(hLHA,TEXT("*.*"),&ii) == LHA_OK ){
do {
printf( "%-30s ", ii.szFileName );
printf( "%10u ", ii.dwOriginalSize );
printf( "%10u ", ii.dwCompressedSize );
printf( "%08X ", ii.dwCRC );
printf( "%3u%% ", ii.wRatio );
printf( "%s ", ii.szAttribute );
printf( "%s ", ii.szMode );
printf( "\n" );
} while ( UnlhaFindNext(hLHA,&ii) == LHA_OK );
}
UnlhaCloseArchive( hLHA );
}
else{
DWORD dwError;
int nErrno;
nErrno = UnlhaGetLastError( &dwError );
printf( "書庫ファイルがオープンできません。(error code:%d,0x%04X)\n", nErrno, nErrno );
}
return 0;
}
こちらの環境は
Windows XP Home SP2
VC++2003.NET(SDK)
UNLHA32.DLL(Ver.2.62b)
UNLHA32.DLL は最新バージョン(2007/11/12 Ver.2.62b)です。
http://homepage3.nifty.com/micco/myoldsoft/unlha32.htm
参考にしたサイトは
http://kumei.ne.jp/c_lang/sdk3/sdk_272.htm
誰か分かりますか?
お願い致します。
自己解決しました。
原因は改行コードを取り除いていないという初歩的ミスでした。(恥)
> printf( "書庫ファイル名:" );
> fgets( szLZHFile, sizeof(szLZHFile), stdin );
> printf( "書庫ファイル名:%s\n\n", szLZHFile );
これを
> printf( "書庫ファイル名:" );
> fgets( szLZHFile, sizeof(szLZHFile), stdin );
> StrTrim( szLZHFile, TEXT(" \t\r\n") );
> printf( "書庫ファイル名:%s\n\n", szLZHFile );
にしたら正常に書庫ファイルが開けた。
お騒がせしました。
でも2時間も考え込んでしまったので。
許して。
ツイート | ![]() |