ファイル出力において、既存のファイルを上書きしようとすると、エラーが出て上書きされません。
新規ファイルの場合は正しく出力されます。
原因わかりましたら教えてください。
情報の過不足ありましたら、提示いたしますので、返信ください。
環境
c言語
VS2015
win8.1update
以下コードです。
//bat.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "bat.h"
int main(void) {
FILE *fp_w;
fp_w=file_make();
file_write(&fp_w);
fclose(fp_w);
return 0;
}
//file_write.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "bat.h"
FILE* file_make() {
FILE *fp_w,*fp_r;
char file_w[N];
char yn[10] = { 0 };
errno_t error;
/*ファイル作成*/
while (1) {
int w_flag = 0;
char file_temp[N];
while (1) {
w_flag = 0;
printf("出力ファイル名を入力してください(拡張子は自動で付きます)\nファイル名:");
scanf_s("%s", file_temp, 256);
while (1) {
printf("ファイル名は%sでいいですか?\n(Y/N)?", file_temp);
scanf_s("%s", &yn, 2);
if (yn[0] == 'y' || yn[0] == 'Y') {
strcpy_s(file_w,_countof(file_w) ,file_temp);
strcat_s(file_w, _countof(file_w),".bat");
if (error = fopen_s(&fp_r,file_w, "r") == 0) {
while (1) {
printf("ファイルが既に存在します\n上書きしますか?\n(Y/N)?");
scanf_s("%s", &yn, 2);
fclose(fp_r);
if (yn[0] == 'y' || yn[0] == 'Y') {
w_flag = 1;
if ( error= fopen_s(&fp_w,file_w, "w+") != 0) {
printf("ファイルオープンエラーです。\n終了します。\n");
exit(1);
}
break;
}
else if (yn[0] == 'n' || yn[0] == 'N') {
w_flag = -1;
break;
}
}
fclose(fp_r);
}
else {
w_flag = 1;
if (error = fopen_s(&fp_w,file_w, "w+") != 0) {
printf("ファイルオープンエラーです。\n終了します。\n");
exit(1);
}
}
}
else if (yn[0] == 'n' || yn[0] == 'N') break;
if (w_flag == -1) break;
if (w_flag == 1)break;
}
if (w_flag == 1) break;
}
if (w_flag == 1) break;
}
return fp_w;
}
void file_write(FILE** fp_w) {
fprintf_s(*fp_w, "@echo off\n\nrem管理者実行確認\nfor /f \"tokens = 3 delims = \\ \" %%i in (\'whoami /groups^|find \"Mandatory\"\') do set LEVEL=%%%%i\n");
}