CFileFind クラスでファイル検索処理後にファイルが開けれない – プログラミング – Home

CFileFind クラスでファイル検...
 
通知
すべてクリア

CFileFind クラスでファイル検索処理後にファイルが開けれない


春雨
 春雨
(@春雨)
ゲスト
結合: 13年前
投稿: 1
Topic starter  

よろしくお願いします。
環境;Windows7 32bit
VS10 MFC
ファイルの有無をMFC のCFileFind クラスのFindFile メソッドで取得し、ファイルが存
在する場合
ifstream で開こうとすると、例外が発生します。
原因がわかりません、ご教示願います。

/*----------------------------------------------------------------------------*/
// FileFind(CString cd)
/*----------------------------------------------------------------------------*/
/**
* @brief ファイルが無ければダウンロードを行う。または
* 現在の日付とファイルのタイムスタンプ(日付)を取得して異
なれば、旧ファイルを削除しダウンロードする。
* ファイルが存在する場合、既存のファイルにて処理を進める。
* @param cd コード番号
*/
/*----------------------------------------------------------------------------*/
void CMChartDoc::FileFind(CString cd)
{

BOOL IsFile = FALSE;
CString lpszFilePath;
CString lpszFname = cd + _T(.csv);
CString cEMes = _T(ファイルが開けれません);
CFileFind find;
try {
lpszFilePath = _T(../\\Data\\) + lpszFname;
IsFile = find.FindFile( lpszFilePath );
find.Close();

//! @brief ファイルが無いときはダウンロード <br>
if( !IsFile ) {
Download( cd );
//! @brief ファイルは有る。且つ、日付が異なる場合はダウンロード <br>
} else if( IsFile == TRUE && IsFileTimeStamp(lpszFilePath) == FALSE) {
CFile::Remove(lpszFilePath);
Download(cd);
}
ifstream incsv(lpszFilePath);
if( incsv.fail( ) ) //! ここで例外処理発生
throw cEMes;
} catch (CInternetException* pEx) { std::cout << pEx << std::endl;
} catch ( ... ) { cout << m_strEMes << std::endl;

}
}


引用解決済
トピックタグ
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

短い割にツッコミどころ満載なのであるが・・・

パス文字として ../\\Data\\ はヘン (POSIX path と DOS path が混じってる)
Download は絶対に成功するわけだね?失敗するとファイルは無い。
Download がダウンロードするファイルは ../Data/123.csv で間違いない?
UAC でバーチャルストアにリダイレクトされていたりしない?
Download は非同期だったりしない?完全完了、ファイルは閉じ済み?
相対パスを指定しているのであるが、カレントディレクトリは大丈夫?
ifstream incsv はその後使わないわけ?
GUI アプリっぽいけど std::cout に出力して何がしたいの?

ファイルが無いかも? ディレクトリが無いかも? 権限が無いかも?
とりあえず失敗原因を探るため incsv.fail() 時に GetLastError を呼ぶべし。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

まずは、具体的な原因を探る事が先決でしょう。
例外が発生しますと書かれても原因は解りません。
動かしている環境に依存する部分もありますから
提示されているソースだけではありえる状況を列挙する事は出来ても
それ以上は無理ですし、具体的な原因は多分ご本人でないと
探れないと思いますよ。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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