質問: INPUT $main -o 更新先 -i 更新元 のようにするとかです。 ユーザ入力... これは CUI なら cin とか gets関数とかで、GUI なら EDIT等のコントロール 等です。 更新日時を取得する方法は知らないですが、「Windows API 更新日時 取得」のように検索すればわかると思いますので、 取得方法が知りたいというわけではないです。 ( 「取得できるデータと実際のデータが食い違う場合がある」等のように注意が必要な場合はその注意もですが。 ) 知りたいことは、 普通はこういう場合はどういう風に元/先 を決定するのか です。 できればダブルクリックで完了するようにしたいので、 ユーザ入力は やらないと思います。(多分。) コマンドライン引数の場合は バッチファイルに書いておけばいいですし。ですけど、C->M と M->C の2つ用意しないといけないか、 バッチファイル内で IFで 分岐しないといけないので、ほぼユーザ入力と変わらない... [環境等] 言語 : C/C++ Windows API: あり コンパイラ : MinGW ( g++ ) 宜しくお願い致します。
回答: 普通?!普通って...なんだ... 普通が重要な案件に思えないんですが。 姿形の無い「普通」というものに捕らわれないことです。 自分なりの使いやすさに注目しましょう。 とりあえず元先の決定方法... 元のファイルパスと先のファイルパスでいいんじゃないですかね。 もしかして想定がもっと難しいのかもしれませんが。 どうしても普通に拘るならLinuxの標準コマンド群を参考にするといいです。 例;ファイルコピーのコマンドです。 Linuxでは`cp [options] src dst`になってますね。 例えばコンソールプログラムで名前が`mycopy`だとしましょう。 ※`main`よりは今回やりたいことに相応しい気がするよね このmycopyの仕様を考えるわけです。 `mycopy src dst` Linuxと同じですが、これで十分ですよね。 -iとか-oとかは今後引数が増えた場合には必要ですが、単一目的のプログラムを作る場合、大体そういう引数は「オプション」です。 今回みたいに動作が確定している場合別に1番目の引数と2番目の引数で十分だと思います。 それから、更新日見て判定して、新しければコピーしてくるという動作のバッチプログラムを作ったとしたら... バッチ内に`C->M`と`M->C`並べて書いても問題無いですよね。 ``` 1CとMが同じ場合 `C->M`は無視される。 `M->C`は無視される。 2Cの方がMより新しい場合 `C->M`は無視される。(Mの方が古い。) `M->C`はコピーされる。 3Mの方がCより新しい場合 `C->M`はコピーされる。 `M->C`は無視される。(ファイルが同じ) ``` それでも2行書くのが煩わしいので、オプションに双方向を示すものを付けるぐらいはしていいかもしれません。 `mycopy -b src dst` -bは適当です、both directionとかね。なんでもいいんです。 ここでもとりあえず自然な命名は暫くは考えないようにしましょう。 人によって差があるので、そもそも「普通」は存在しませんしね。 自分なりの判断基準を作るのは自由ですけどね。 ところで、こういう動作はWindowsならOneDrive使えばクラウドでやってくれますよ。