-1

argvパラメーターを反復処理する方法は知っていますが、ファイルパスを取得し、その引数をifstreamで使用して、正しい形式(.DAT)であることを確認します。ただし、ofstreamの場合は、まったく同じパスを使用しますが、代わりに.txt拡張子を付けます。

4

2 に答える 2

0

引数として目的の「ベース」名を渡します。次に、それをとして開こうとするときは、自分で拡張子ifstreamを追加し、ファイルが存在することを確認します。.DATその場合.txtは、ofstreamを追加して、そのファイルに書き込みます。

たとえば、次のように呼び出します。myapp.exe inout

次に、入力ファイル名を確認します。

std::ifstream ifs(std::string(argv[1]) + ".dat"); // reads from inout.dat
if (ifs.fail()) ...

std::ofstream ofs(std::string(argv[1]) + ".txt"); // writes to inout.txt
if (ofs.fail()) ...

編集:.datファイルを実行可能ファイルにドラッグしているという重要な詳細を追加しました。その場合は、自分で拡張機能を削除する必要があります。このようなものは機能するはずです(ただし、エラー耐性はありません!):

std::string basename = argv[1]; // take the whole path, including dat extension (DAT EXTENSION!)
basename.resize(basename.length() - 3); // remove dat extension (hah!)
std::string outname = basename + "txt"; // add the output extension

注:このコードはテストされておらず、少なくとも堅牢ではありません。渡すすべてのファイルの拡張子が3文字であると想定しています。

于 2013-02-28T16:01:21.693 に答える
0

rfindを呼び出して、引数で最後に出現する「.DAT」の位置を検索し、結果の位置にサブストリングを取得します。この位置に、.txtを追加できます。

string fullPath = string(argv[1]);
size_t pos = fullPath.rfind(".DAT");
if (pos == string::npos)
{
//fail
}else{
string outfilePath = (fullPath.substr(0,pos)).append(".txt");
//write to file
}
于 2013-02-28T16:25:41.750 に答える