【前提条件】 txt形式のファイルの中に1行づつフォルダへのパスが書いてあります.(例 /ap/tmp
以下簡易処理手順
1.テキスト読み込み (問題なし
2.そのフォルダのファイル一覧表示( ここで問題発生
プログラム自体は動作しますが,仮説と異なる,私の予想では,puts(ffd.cFileName);の所で文字を出力するはずなのですが・・・
何も出力してくれません.理由としてはFindFirstFileがINVALID_HANDLE_VALUE を返しているからということは分かっていますが・・・.;; さらにその原因分かる方お願いします.
以下に動くプログラムを載せます( 一応 構成プロパティの文字セットは マルチバイト文字セットにしてます.
(ただし実際に動作を試すのはフォルダを作ったりセッティングが面倒だと思いますのでやらないことを勧めます.
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <time.h>
#include <string>
#include <iostream>
#include <fstream>
using namespace std;
/*ここまででインクルード等の処理*/
std::string Replace( std::string String1, std::string String2, std::string String3 ); /*機能は文字の置き換え*/
int main(int argc , char *argv[]) {
WIN32_FIND_DATA ffd;
/* 文字列宣言 */
string folder;
string str1 = "aaa";/* 適当なフォルダ名 */
string str2 = "aaa111";/* 適当なフォルダ名 */
/* 引数チェック処理 */
if(argc < 2){
printf("引数ERROR フォルダ名の記載された.txtをください");
exit(1);
}
/* 指定されたテキストファイル読み込み */
ifstream ifs(argv[1]);
HANDLE h;
/* テキストファイルを一行づつ読み込む */
while(ifs && getline(ifs,folder)) {
folder = str1+folder;/* フォルダ名設定 */
folder = Replace(folder,"/","\\");/* 文字をスラッシュを円マークに置き換える処理 */
h = FindFirstFile(folder.c_str(), &ffd);/* ここで INVALID_HANDLE_VALUE を受け取ってしまう*/
if ( h != INVALID_HANDLE_VALUE ) {
do {
puts(ffd.cFileName);/* ファイル一覧表示 */
} while ( FindNextFile(h, &ffd) );
FindClose(h);
}
}
}
/* 以下は本処理ではありません. */
std::string Replace( std::string String1, std::string String2, std::string String3 )
{
std::string::size_type Pos( String1.find( String2 ) );
while( Pos != std::string::npos )
{
String1.replace( Pos, String2.length(), String3 );
Pos = String1.find( String2, Pos + String3.length() );
}
return String1;
}