OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

任意のファイルを別のファイルにコピーするプログラム。

  • 困ってます
  • 質問No.184311
  • 閲覧数86
  • ありがとう数2
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 16% (2/12)

コマンドラインからコピー元、コピー先ファイル名を指定してファイルをコピーするプログラムなんですが…

#include <stdio.h>
#include <stdlib.h>

main(int argc, char *argv[])
{
FILE *fp;
if ((fp = fopen(argv[0],"r") == NULL){
printf("ファイル%sが存在しません。\n",argv[0]);exit(-1);
}
if ((fp = fopen(argv[1],"w") == NULL){
printf("ファイル%sがコピーできません。\n",argv[1]);exit(-1);
}
fclose(fp);
}

どこか間違っているところがあるでしょうか?
ありましたら詳しく教えてもらえると幸いです。
少し自信がないのでわかる方はよろしくおねがいします。
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1
レベル11

ベストアンサー率 30% (72/239)

おそらくこのソースだとかなり問題があると思います。

1.argv[0]は自分です。
 test.exe aaa bbbとした場合、
 argv[0]="test.exe"
 argv[1]="aaa"
 argv[2]="bbb"
 となります。

2.fpが一つしか定義されていません。
 FILE *fp1, *fp2として二つ定義しそれぞれのポインタを格納しましょう。
 ⇒一回目のfopenのfpを二回目で又使ってしまっています。

3.fcloseはファイルごとに行いましょう。

4.これではファイルを開いているだけで、
 書き込んでいる作業がどこにもありません
 書き込むにはfwriteです。

簡単なフローとしては、
1.argv[1]をオープンして内容を読込み内部バッファに保存しておく。
2.argv[2]をオープンして内部バッファの内容を書き込む。
3.両方クローズする。
ですね。

これ以外にも方法はいろいろあります。
わからなかったら補足して下さい。
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.2
レベル13

ベストアンサー率 37% (570/1525)

エラー発生時に処理が中断されていません。 元のファイル(argv[1])が存在しなくても、先のファイル(argv[2])が書きこみ不能でも強引にコピーしようとして更なるエラーを引き起こすでしょう。 一般に、コマンドラインで使用するプログラムはエラーを検知したら 1 エラーを回避する為の処理(正しいファイル名の再入力など)を行う 2 処理を中断する どちらかです。 この場合、エラーメッセ ...続きを読む
エラー発生時に処理が中断されていません。
元のファイル(argv[1])が存在しなくても、先のファイル(argv[2])が書きこみ不能でも強引にコピーしようとして更なるエラーを引き起こすでしょう。

一般に、コマンドラインで使用するプログラムはエラーを検知したら
1 エラーを回避する為の処理(正しいファイル名の再入力など)を行う
2 処理を中断する
どちらかです。

この場合、エラーメッセージが表示されているので0以外の値でreturnするべきでしょう。

以下、余計なお世話かもしれませんが…
・エラーはメッセージはprintf()よりもperror()のほうがよい
・コピー先ファイルが既に存在するときもエラーにしたほうがよいかもしれない


  • 回答No.3
レベル12

ベストアンサー率 48% (325/664)

他のお二方の回答に加えて、 fopen()の第2引数を上から順に "rb" "wb" にする必要があります。 これがないと、ファイル中の0x1Aをファイル終端として認識してしまい、それ以降のデータはコピーされません。 テキストファイルのコピーだけしか行わない場合は不要ですが…
他のお二方の回答に加えて、
fopen()の第2引数を上から順に
"rb"
"wb"
にする必要があります。
これがないと、ファイル中の0x1Aをファイル終端として認識してしまい、それ以降のデータはコピーされません。
テキストファイルのコピーだけしか行わない場合は不要ですが…
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ