ディレクトリのパスを受け取って、その中の全てのテキストファイルに対して作業をする為に以下のようなコードを書いたのですが、
1ファイル目はうまくいくのに2ファイル目以降がfin.open((LPCTSTR)(dirname + "\\" + filename));でオープンに失敗してしまいます。
while(getline(fin, line))の部分をコメントアウトすれば成功するので、おそらく原因はそこなのでしょうが、何故なのかがわかりません。
出来れば解決法も含めて教えてください。開発環境は Visual C++.NETです。

CString dirname; /* ディレクトリの名前 */       CString filepath; /* dirname\*.txtに適合するファイルのパス */ 
CString filename; /* dirname\*.txtに適合するファイル名 */       CFileFind FileFind;
BOOL bfnf; /* FileFind.FindNextFile()の成否 */       string line; /* ファイルから1行読み込む時のバッファ */
ifstream fin;

filepath = dirname + "\\*.txt";
if(!FileFind.FindFile(filepath)) return FALSE;// dirname\*.txtなるファイルを取得。なければ終わり
do{
 bfnf = FileFind.FindNextFile();
 if(!FileFind.IsDots()){// .\や..\の除外
  filename = FileFind.GetFileName();
  fin.open((LPCTSTR)(dirname + "\\" + filename));// dirname\filenameのファイルを開く(CString->char*)
  if(!fin)return FALSE; // ファイルのオープンに失敗したらFALSEを返し終了
  while(getline(fin, line)){// 1行取って来る(失敗したら終了)
  /* 色々な作業 */
  }
 fin.close();
 }
}while(bfnf);