C言語関係掲示板

過去ログ

No.177.ファイルを指定ディレクトリにコピー


No.1148

ファイルのコピー
投稿者---やっちゃん(2002/03/04 14:20:28)


C言語のプログラムで分からないことがありますので分かる方がいらっしゃいましたら是非教えてください。
指定したファイルを指定ディレクトリにコピーするにはどのようにしたらいいのでしょうか?
ファイルをコピーする関数というのはあるのでしょうか?
宜しくお願い致します。
尚、OSはRedhatです。

お分かりになるかたがいらっしゃいましたら是非宜しくお願い致します。



No.1149

Re:ファイルのコピー
投稿者---C職人(2002/03/04 15:32:03)


>C言語のプログラムで分からないことがありますので分かる方がいらっしゃいましたら是非教えてください。
>指定したファイルを指定ディレクトリにコピーするにはどのようにしたらいいのでしょうか?
>ファイルをコピーする関数というのはあるのでしょうか?
>宜しくお願い致します。
>尚、OSはRedhatです。
>
>お分かりになるかたがいらっしゃいましたら是非宜しくお願い致します

こんにちは。
仕様でいまいち明確でない部分があります。
実行時に引数として指定ファイル、指定ディレクトリをもらうという方向で
いいのでしょうか。
たとえば、実行ファイル c:\test.txt c:\myFolderのような形
このように考えてコーディングすればいいのでしょうか。





No.1152

Re:ファイルのコピー
投稿者---やっちゃん(2002/03/04 18:48:32)


>>C言語のプログラムで分からないことがありますので分かる方がいらっしゃいましたら是非教えてください。
>>指定したファイルを指定ディレクトリにコピーするにはどのようにしたらいいのでしょうか?
>>ファイルをコピーする関数というのはあるのでしょうか?
>>宜しくお願い致します。
>>尚、OSはRedhatです。
>>
>>お分かりになるかたがいらっしゃいましたら是非宜しくお願い致します
>
>こんにちは。
>仕様でいまいち明確でない部分があります。
>実行時に引数として指定ファイル、指定ディレクトリをもらうという方向で
>いいのでしょうか。
>たとえば、実行ファイル c:\test.txt c:\myFolderのような形
>このように考えてコーディングすればいいのでしょうか。

できれば、プログラム内の変数でコピーするファイル、コピー先ディレクトリを指定できたらと思っています。

宜しくお願い致します。




No.1159

Re:ファイルのコピー
投稿者---C職人(2002/03/04 23:41:08)


>>>C言語のプログラムで分からないことがありますので分かる方がいらっしゃいましたら是非教えてください。
>>>指定したファイルを指定ディレクトリにコピーするにはどのようにしたらいいのでしょうか?
>>>ファイルをコピーする関数というのはあるのでしょうか?
>>>宜しくお願い致します。
>>>尚、OSはRedhatです。
>>>
>>>お分かりになるかたがいらっしゃいましたら是非宜しくお願い致します
>>
>>こんにちは。
>>仕様でいまいち明確でない部分があります。
>>実行時に引数として指定ファイル、指定ディレクトリをもらうという方向で
>>いいのでしょうか。
>>たとえば、実行ファイル c:\test.txt c:\myFolderのような形
>>このように考えてコーディングすればいいのでしょうか。
>
>できれば、プログラム内の変数でコピーするファイル、コピー先ディレクトリを指定できたらと思っています。
>
>宜しくお願い致します。
>
>
#include <stdio.h>
#include <string.h>

char *getFileName(char *);

int main(int argc,char *argv[])
{
FILE *in_fp;
FILE *out_fp;
char fileName[256];
char out_fullPath[256];
char line[256];

/*引数の数チェック*/
if(argc != 3){
fprintf(stderr,"引数の数が違います。\n");
return 1;
}

/*入力ファイルオープン*/
in_fp=fopen(argv[1],"r");
if(in_fp==NULL){
fprintf(stderr,"入力ファイルをオープンできませんでした。\n");
return 1;
}

/*フルパスファイル名からファイル名を抽出*/
strcpy(fileName,getFileName(argv[1]));

/*出力ファイルオープン*/
sprintf(out_fullPath,"%s\\%s",argv[2],fileName);
out_fp=fopen(out_fullPath,"w");
if(out_fp==NULL){
fprintf(stderr,"出力ファイルをオープンできませんでした。\n");
return 1;
}

/*ファイルエンドまで一行リード*/
while(fgets(line,256,in_fp) != NULL){
/*ファイルに一行ずつコピー*/
fprintf(out_fp,"%s",line);
}

return 0;
}


char *getFileName(char *p)
{
int len=0;
static char fileName[256];
int i=0;

len=strlen(p);

/*ポインタを最後の文字を指すように進めておく*/
/*後ろから検索するためです*/
p=p+len-1;

/*円マークを探す*/
while(*p != '\\'){
p--;
}

/*円マークまでポインタが進んでいるのでファイル名を切り出すにはひとつポインタを進めてやる*/
p++;

/*文字列の終りまで*/
while(*p != '\0'){
/*ファイルネーム用に確保したエリアに一文字ずつコピー*/
fileName[i] = *p;
p++;
i++;
}
fileName[i]='\0';

printf("%s\n",fileName);

/*切り出したファイル名を返す*/
return fileName;
}
実行方法はたとえばですが以下のようにしてください。
実行ファイル名 c:\aaa\bbb\ccc.txt d:\myFolder
するとd:\myFolderの下にccc.txtがコピーされています。
ただこのプログラムには欠陥があります。
それはコピーするファイルをパス指定でなく直接ccc.txtのように指定した場合
実行exeと同じ場所にあるファイルとみなされるので現状のままではそういったものには対処していません。場合分けが必要です。その辺は自分で考えてみてください。難しくはないと思います。



戻る


「初心者のためのポイント学習C言語」 Last modified:2002.05.14
Copyright(c) 2000-2002 TOMOJI All Rights Reserved