【C言語】テキストファイルをコピーするプログラムを作成してみた!
こんにちは、tangoです。
今回なんですが、絶賛勉強中のC言語で簡単なプログラムを作成しました。
内容としましては、あるテキストファイルの内容を別のテキストファイルにコピーするプログラムです。
それでは、さっそく紹介していきたいと思います。
★処理の流れ
1.今回は、test.txtの中身をコピーしていきたいと思います。
2.文字コードの設定をします。
詳しい詳細は、コマンド集・用語集(随時更新)で紹介しているのでそちらを参考にしてください。
3.backup.cをコンパイルします。
※コマンド:gcc backup.c
4.先程のフォルダに戻るとa.exeが作成されています。
もし、作成されていなかったらセキュリティがかかっている可能性がありますので、【Windows版】コマンドプロンプトでC言語をコンパイルしてみたの『ウイルス対策ソフトの無効化』を参考にしてみてください。
5.先程作成されたa.exeを実行していきます。
コマンド:a か a.exe
6.コピー元のテキストファイルを選択します。
もし、選択したテキストファイルがない場合は、再度入力します。
今回は、test.txt をコピー元に選択します。
7.コピー先のテキストファイルを選択します。
※既存のテキストファイルを使う場合は、前の内容が消えてしまうので注意してください。
今回は、text.txt をコピー先に選択します。
8.先程のフォルダに戻り、text.txt が作成されているか確認します。
9.コピー元の内容が、コピー先に反映されているか確認します。
無事に反映されました。
以上があるテキストファイルの内容を別のテキストファイルにコピーする流れになります。
★ソースコード
次にソースコードの紹介です。
# include<stdio.h>
# include<stdlib.h>
# define a 100
# define c 1000
//構造体
typedef struct{
char name[a];
int namber;
}worker;
int main(){
int b = 0;
char text0[a], text1[a], text2[a], buf[c];
FILE *fp;
FILE *output_txt;
//メモリの確保
worker *data = malloc(b * sizeof(worker));
//BACKUPファイルを探す
for(;;){
printf("どの.txtをBACKUPしますか?\n");
printf("※拡張子まで含めてください。\n");
scanf("%s", text0);
if((fp = fopen(text0, "r")) == NULL){
printf("お探しのテキストがありません。\n");
printf("\r\n");
continue;
}else{
printf("テキストを発見しました\n\n");
break;
}
}
//BACKUP用のファイル生成して、BACKUP用のテキストファイルに反映
printf("BACKUP用のテキストエディタ名を入力してください!\n");
printf("※新規作成もできます\n");
scanf("%s", text1);
if((output_txt = fopen(text1, "w")) == NULL){
printf("処理を強制終了しました");
return 1;
}else{
while(fgets(buf, sizeof(buf), fp))
fprintf(output_txt, "%s", buf);
printf("\n%sのデータを%sに書き込みました!", &text0, &text1);
fclose(output_txt);
}
fclose(fp);
return 0;
}
まだ、勉強しだして間もないので、上手いコードではないので、ご指摘とか頂けたら幸いです。
C言語の詳しい方と繋がり、いろんな情報交換ができたらいいなと考えています。
今回はこの辺で終わりたいと思います。
みなさんのエンジニアライフに少しでもお役に立てれば幸いです。
ありがとうございました。
・コマンド集・用語集(随時更新)
https://note.com/tango9512357/n/n68594748c3c7
・【Windows版】コマンドプロンプトでC言語をコンパイルしてみた
https://note.com/tango9512357/n/nb7c3ef649c9f#qOeov
・Twitter
https://twitter.com/tango3564
・Instagram
https://www.instagram.com/tango3690/