広告
↓発売日:2018年09月22日↓
![]() |
新品価格 |
では今回は起動部分を作っていきます。
置換したいファイルをドラッグ&ドロップすれば起動するようにするのと、簡単なエラー対策も加えます。
ドラッグ&ドロップによる起動自体はc言語だったら普通にコンパイルして生成される実行ファイル「.exe」ファイルの上にドラッグ&ドロップすれば自動的にプログラムは起動します。
そして「main()」関数の引数にその情報が格納される事になります。
まずは次のプログラムを普通に実行してみてください。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(int argc, char *argv[]){
int ch;
printf("argc = %d\n\n",argc);
printf("argv[0] = %s\n",argv[0]);
ch = getchar();
return 0;
}
■実行結果■
「main()」関数の引数に注目です。
int main(int argc, char *argv[])
「int argc」というのが受け取った情報の数で「char *argv[]」というのが受けとった内容になります。
「argv[0]」には必ずこの実行ファイルの場所を示すパスが入り、「argv[1]」以降にその他の内容が格納されていきます。
それではプログラムの内容を少し変えて
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(int argc, char *argv[]){
int ch;
printf("argc = %d\n\n",argc);
printf("argv[0] = %s\n",argv[0]);
printf("argv[1] = %s\n",argv[1]);
ch = getchar();
return 0;
}
できた実行ファイルの上に何かファイルをドラッグ&ドロップしてファイル名を確認してみましょう。
ファイル名を確認することができました!
それではファイル名が取得できたトコロで前回作ったクラスにそのファイル名を渡して実行させます。
char str[1024] = "java -classpath ./class CodeToHTML "; strcat(str, argv[1]); system(str);
実行したいクラスが同じフォルダ内にない場合は「-classpath」コマンドでパスを指定して実行します。
さきほど取得したファイル名も文字列を結合する「strcat()」関数を使ってくっつけて「system」コマンドを使ってコマンドライン上から実行します。
後は簡単なエラー対策を加えてみます。
例えばこのような状態で
実行ファイルを直接ダブルクリックされても大丈夫なようにエラー対策を加えます。
if (argc == 2){
/*置換処理に入る*/
}
else{
/*エラーメッセージなどを表示*/
}
ここは簡単にmain関数の引数の数で判断する事にしました。
もしダブルクリックで直接実行された時は「argc」は「1」になります。
ドラッグ&ドロップで実行された時はファイル名も加わるので「argc」は「2」になります。
という事で「argc」が「2」の時に処理にはいるようにしました。
今回のプログラムはファイルの中身を全てテキスト変換して表示するのでもしここに画像ファイルや動画ファイルなどを落としたらきっと大変な事になります。(恐いので試してないですがもしかしたら「FileReader」クラスなんかがうまい事対応してくれるかも・・・。)
なので念のためテキストファイルのみを受け付けるようにします。
file_name_length = strlen(argv[1]);
for (i = 0; i < 5; i++){
extension[i] = *(argv[1] + (file_name_length + (i - 4)));
}
if(strcmp(extension, extension2) == 0){
strcat(str, argv[1]);
system(str);
}
else{
printf("error");
ch = getchar();
}
取得したファイル名のお尻の部分、つまり拡張子の部分だけを抜き取り「strcmp()」関数を使ってそれが「.txt」ファイルだったら実行するようにします。
これで簡単なエラー対策は完了です。
置換完了!
広告
↓発売日:2016年02月29日↓
![]() |
12歳からはじめる ゼロからのC言語 ゲームプログラミング教室 新品価格 |
↓発売日:2018年06月22日↓
![]() |
新品価格 |
↓発売日:2018年03月09日↓
![]() |
新品価格 |
↓発売日:2017年06月14日↓
![]() |
新品価格 |
↓発売日:2018年05月21日↓
![]() |
新品価格 |
↓発売日:2017年12月07日↓
![]() |
新品価格 |
↓発売日:2017年02月08日↓
![]() |
新・明解C言語で学ぶアルゴリズムとデータ構造 (明解シリーズ) 新品価格 |
↓発売日:2017年09月26日↓
![]() |
新品価格 |