データの受け渡しを実現させたい
C++ で作成した下記の2つのアプリケーションを PowerShell を使用してデータの受け渡しをしたいと考えています。
・StdOutC.exe 「ファイルを読み取りデータを出力させる」アプリケーション
・StdInC.exe 「データを受け取りデータを加工する」アプリケーション
PowerShell
1StdOutC.exe .¥test.txt | StdInC.exe
stdOutC.exe で test.txt から得た文字列をパイプラインに渡す部分と、
パイプラインから渡ってきた文字列を受け取る部分をどのようにコーディングすればいいのかわかりません。
該当のソースコード
StdOutC.exe
C++
1 2#include <iostream> 3#include <fstream> 4#include <string> 5#include <vector> 6 7using namespace std; 8 9vector<string> strptary_to_vec(int n, char* p[]) 10{ 11 vector<string> temp; 12 for (int i = 0; i < n; i++) 13 { 14 temp.push_back(p[i]); 15 } 16 17 return temp; 18} 19 20int main(int argc, char *argv[]) 21{ 22 // コマンドライン文字列を vector<string> に変換 23 vector<string> arg = strptary_to_vec(argc, argv); 24 25 // 第一引数は自身のファイル 26 if (argc <= 1) 27 { 28 cout << "引き数が足りません。 \n処理を終了します\n。"; 29 30 // 処理終了 31 return 0; 32 } 33 34 // 表示 35 // 第一引数は省略 36 for (vector<string>::size_type i = 1; i < arg.size(); i++) 37 { 38 cout << "[" << arg[i] << "] が読み込まれました。" << "\n"; 39 } 40 41 if (argc >= 3) 42 { 43 cout << "複数の読み込みを検知しました。\n先頭のファイルのみ処理を開始します。\n"; 44 } 45 46 // 先頭のファイルパスを読み込み 47 string path(arg.at(1)); 48 49 // ストリームライブラリの各クラスのコンストラクタをあわせるため 50 // string型ではなく const char* 型にしている 51 ifstream fis(path.c_str()); 52 53 // ファイルが開けるか確認 54 // 入力ストリームをオープン 55 if (fis.is_open()) 56 { 57 cout << "ファイルの存在を確認。\n処理を実行します。"; 58 59 // 入力ストリームをクローズ 60 fis.close(); 61 62 // 出力ストリームとしてファイルをオープン 63 // 「本当はパイプラインにデータを渡したい」 64 ofstream fos(path.c_str(), ios_base::app); 65 fos << "out file stream end !!"; 66 } 67 else 68 { 69 cout << "ファイルが存在しません。\n処理を終了します。"; 70 } 71 72} 73
StdInC.exe
C++
1 2#include <iostream> 3#include <fstream> 4#include <string> 5#include <vector> 6 7using namespace std; 8 9int main(int argc, char* argv[]) 10{ 11 12#if 1 // test 「本当ならパイプラインから得たデータを受け取りたい!!」 13 14 string folderPath("C:\Users\hoge\Desktop\PowerShellPractice\TESTF\"); 15 string fileName("test.txt"); 16 string path = folderPath + fileName; 17 18#endif 19 20 ifstream fis(path); 21 22 if (fis.is_open() == true) 23 { 24 string text; 25 26 while (true) 27 { 28 // 1行丸ごと 29 getline(fis, text); 30 31 // ストリームに失敗 (読み込めない場合) 32 if (fis.fail()) 33 { 34 // 読み込み終了 35 break; 36 } 37 38 cout << text << "\n"; 39 40 } 41 } 42 else 43 { 44 cout << "処理失敗\n"; 45 } 46 47 cout << "処理終了\n"; 48 49} 50 51
試したこと
ネットで検索をかけたり、書籍を読みましたが見つけることができませんでした。
補足情報(FW/ツールのバージョンなど)
開発環境
Visual Studio 2017
PowerShell Core 7.1.0-preview.7
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/20 15:20
2020/09/20 15:44