わかりました。POSIXAPIを使用してCでファイルを書き込む宿題があります。この宿題では、読み取り元のファイル名、書き込み先のファイル名を要求し、一方を他方にコピーします。私はこれを行いました、そしてそれは素晴らしい働きをします!エラーチェックインを入れようとしていますが、書き込み先のファイルが既に存在するかどうかを確認し、存在する場合は、ユーザーが上書きするかどうかを確認します。問題は、ファイルが存在しない場合でも、ファイルが存在することを常に示していることです。プログラムの残りの部分は問題なく動作します。私はここで多くのことを読み、POSIXで多くの有用なものを見つけましたが、参照するこのタイプの問題を見つけることができません。以下は私のコードです:
#include <fcntl.h> // POSIX: give access to open
#include <unistd.h> // POSIX: gives access to read, write, close
#include <stdio.h> // POSIX: gives access to BUFSIZ
int main() {
int source = -1;
int target;
char sourcefile[50];
char targetfile[50];
char buff[BUFSIZ];
char ow[3];
size_t size;
printf("Please enter the name of the file you wish to read: ");
scanf( "%s", sourcefile );
printf( "\n" );
printf("Please enter the name of the file you wish to write to: ");
scanf( "%s", targetfile );
printf( "\n" );
source = open( sourcefile, O_RDONLY, 0);
//Test for existence of input file
if( source == -1 )
{
perror( "Cannot find file" );
return 1;
}
target = open( targetfile, O_WRONLY, 0644 );
//Test for existence of output file
if( target == 0 )
{
perror( "File already exists" );
printf( "Do you wish to overwrite? (yes or no): " );
scanf( "%s", ow );
if( strcmp( ow, "yes" ) == 0 )
{
target = open( targetfile, O_WRONLY | O_CREAT, 0644);
}else
{
printf( "Program Terminated!\n" );
return 1;
}
}else if( target == -1 )
{
target = open( targetfile, O_WRONLY | O_CREAT, 0644);
}
while ((size = read(source, buff, BUFSIZ)) > 0)
{
write(target, buff, size);
}
close(source);
close(target);
return 0;
}