というものを作ってみました。
なんで作ったかって、前回お話ししたスキンの公開用ファイルを作ったとき、大量のパスのリネームが必要になったからです。
まあそれはさておき仕様なんですが、コンソールアプリケーションで引数を指定して実行します。これだけやれば対象フォルダ内すべての
指定テキストファイルに対して置換をかけてくれます。具体的にはこんな感じ:
そしてコードはこんな感じ。短所として置換の有無にかかわらず対象ファイルすべてのタイムスタンプが更新されてしまうのですが、
それについては気が向いたら直そうと思います。
誰かがやってくれてもいいのよ??
あと、とりあえずできればよかったのでリファクタリングとかエラーチェックとかは今のところ一切やってないです(((
► スポイラーを表示
CODE:
#include
#include
#include
#include
#include
#include
#include
typedef std::pair ReplaceData;
// メカスロのIReadCSVから引用
template void StrToNum(T& InputFor,std::string &p_Data){
// [act]テンプレート型、1つ目の引数に2つ目の文字列から抽出した数字を代入します
// bool型の場合は整数で判別し、0がfalse、それ以外がtrueとなる模様です
std::istringstream Data(p_Data);
Data>>InputFor;
};
bool searchAndReplace(std::string pFolder, std::vector pExtensions, std::vector pReplaces){
HANDLE hFind;
WIN32_FIND_DATA win32fd;
for(int i=-1; i= 0 ? pExtensions.at(i) : "*");
// std::cout fileLine;
int replaceNum = 0;
bool isReplace = false;
/* read */{
std::ifstream read(replaceFile);
std::string temp;
while(read && getline(read, temp)) {
fileLine.push(temp);
}
}
/* replace & write */{
std::ofstream write(replaceFile, std::ios::trunc);
while(!fileLine.empty()){
std::string dst = fileLine.front();
fileLine.pop();
for(unsigned j=0; j 0){
std::cout extensions;
int extNum;
StrToNum(extNum, std::string(argv[2]));
for(int i=0; i replaces;
for(int i=3+extNum; i+1
[url=http://d.hatena.ne.jp/s-kita/20100129/1264776052]Win32API ディレクトリを走査しファイルを検索する FindFirstFile FindNextFile FindClose - s-kitaの日記[/url]
[url=http://minus9d.hatenablog.com/entry/20120519/1337412307]C++の文字列操作 その3 - minus9d's diary[/url] (文字列の置換について)
[url=http://ppp-lab.sakura.ne.jp/cpp/library/033.html]C++編(標準ライブラリ) 第33章 ファイルストリーム[/url]
[url=http://ppp-lab.sakura.ne.jp/cpp/library/001.html]C++編(標準ライブラリ) 第1章 string[/url] ※リンク先が新サイト閲覧推奨中
[url=http://sato-si.at.webry.info/200711/article_3.html]C++ fstreamの使い方 さとーC++ぶろぐ/ウェブリブログ[/url]