ファイルの読出しについて – プログラミング – Home

ファイルの読出しについて
 
通知
すべてクリア

ファイルの読出しについて


もっちー
 もっちー
(@もっちー)
ゲスト
結合: 22年前
投稿: 4
Topic starter  

次のプログラムがファイル読出しできません。どこが間違ってるのかがわかりません・・
教えてください。
まず、ダイアログにOpendirボタンをつけました。ここはフォルダ検索場所です。
フォルダを選んだ後にエラーがおきます
void C***View::OnOpendir()
{
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
BROWSEINFO bi;
TCHAR szDir[MAX_PATH];
LPITEMIDLIST pidl;
LPMALLOC pMalloc;
// Shell の標準のアロケータを取得
if (SUCCEEDED(SHGetMalloc(&pMalloc)))
{
// BROWSEINFO 構造体を埋める
ZeroMemory(&bi,sizeof(bi));
bi.hwndOwner = m_hWnd; // オーナーウィンドウハンドルを設定
bi.pidlRoot = 0;
bi.pszDisplayName = 0;

bi.lpszTitle = タイトルです。;

bi.ulFlags = BIF_RETURNONLYFSDIRS;
bi.lpfn = NULL;
// フォルダの参照ダイアログボックスの表示
pidl = SHBrowseForFolder(&bi);
if (pidl)

{
if (SHGetPathFromIDList(pidl,szDir))

{
m_folderName = szDir;
SetDlgItemText( IDC_DIRECTORY, m_folderName );
}
pMalloc->Free(pidl);
}

pMalloc->Release();
}
SetCurrentDirectory( m_folderName );

if( find.FindFile( GetWildCardFromDlg(), 0 )) {

find.FindNextFile();
m_fileName = find.GetFileName();
SetDlgItemText( IDC_SRCFILENAME, m_fileName );
DisplayImage( find.GetFilePath() );
}
}


引用解決済
トピックタグ
もっちー
 もっちー
(@もっちー)
ゲスト
結合: 22年前
投稿: 4
Topic starter  

次の作業です。
DisplayImage( find.GetFilePath() );にとんで

void C***View::DisplayImage(CString filePath)
{
m_image->ReadDataFromFile( filePath );

}
となります。
そしてファイル読出しです。
//image.cpp

#include stdafx.h
#include image.h

CImage::CImage()

{
header= new char[HEADER_SIZE];
pImage = new unsigned short[IMAGEDATA_SIZE];
}

CImage::~CImage()

{ delete header;
delete pImage;
}
void CImage::ReadDataFromFile(LPCSTR fileName)
{
CFile hFile;
hFile.Open( fileName, CFile::modeRead, NULL );

if( hFile.GetLength() < HEADER_SIZE ) {
hFile.Close();

return;

}

hFile.Seek( HEADER_SIZE, CFile::begin );

int i;

unsigned short *tmp;

for ( i=0, tmp=pImage; i<IMAGEDATA_SIZE; i++, tmp++ ) {

hFile.Read( tmp, sizeof( unsigned short ) );

}

hFile.Close();

}

なにか間違ってるでしょうか?


返信引用
もっちー
 もっちー
(@もっちー)
ゲスト
結合: 22年前
投稿: 4
Topic starter  

まとめると
ボタンを押して、フォルダ参照でデータを選択し、ファイルを読出しを行います。
どうやら、フォルダ参照はできますがデータを読み出すことができないようです。


返信引用
wood
 wood
(@wood)
ゲスト
結合: 23年前
投稿: 895
 

デバックのステップ実行でなにが原因か分からないですか
多分 VC++ なんですよね

>発言される前に「使用上の注意」を必ずお読み下さい。


返信引用
もっちー
 もっちー
(@もっちー)
ゲスト
結合: 22年前
投稿: 4
Topic starter  

VC++です


返信引用
lap
 lap
(@lap)
ゲスト
結合: 22年前
投稿: 11
 

>フォルダを選んだ後にエラーがおきます

エラーが起きた、じゃなくエラー内容を詳しく書いてください。


返信引用
Green
 Green
(@Green)
ゲスト
結合: 22年前
投稿: 11
 

Greenです。
よく読んでないので違うかもしれませんが
> m_image->ReadDataFromFile( filePath );
でm_imageがNewされていないとか。
あとはもっと詳しい情報がないとわからないと思います。


返信引用
島
 島
(@島)
ゲスト
結合: 23年前
投稿: 238
 

CImage はかなり興味深いクラスですね。予めわかっているサイズの排列をわざわざ
コンストラクターで確保して、しかもどうやら header というメンバーには読み込ま
ないで空のままにしておくようです(少なくとも CImage::ReadDataFromFile() では
そうなっている)
(私には生成子で何故固定長のバッファーを new によって確保するのかが理解できない)
更に、CImage::ReadFataFromaFile() では、わざわざ for ループでイメージデーター
を読み込んでいますが、予定よりファイルの大きさが小さい場合はどうするつもりなんで
しょうか
余計な心配なんですが、読み込むのが DIB 形式の画像ならこのような読み方では
正しく読める訳がないなと思ってしまいました

CImage::ReadDataFromFile() には少し問題が有る事が判りました
1) header のデーターをなぜか読もうとしていない
2) ファイルが予定より小さくても検出できていないので読み込めだと思い込んでいる

さて、C***View::OnOpenDir() ですが、 if (pidl) { 以前の m_folderName の値が
どうなっているか不明なので、この判定(if (pidl) )で失敗したときに
SetCurrentDirectory() の実引数が予定通りの値になっているかどうか気になります


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました