!!!C言語のIO関数 {{category ScrapCode,"C/C++",nolink}}C言語の低水準・高水準 および Win32API を使用したファイルの読み書き処理。 サンプルとしてコピー元とコピー先のファイル名を与えてそれぞれの関数を利用して内容をコピーを作成する関数。手元に残っていたのをそのまま転記。 !!!低水準ファイル処理 {{code Java,4, /* **************************************************************** */ /* * インクルードファイル定義 * */ /* **************************************************************** */ #include /* 標準 */ #include /* 低水準 */ #include /* 低水準:許容操作種別 */ #include /* 低水準:アクセス権 */ #include /* 低水準: */ /* **************************************************************** */ /* * 低水準ファイル処理 * */ /* **************************************************************** */ int rw_lo_proc(const char *ifname, const char *ofname){ int rd_fh, wt_fh; /* ファイルハンドル */ int size; /* 読み込みサイズ */ int ferr; /* 処理結果戻り値 */ char buff[512]; /* 格納場所 */ rd_fh = _open(ifname, _O_RDONLY | _O_SEQUENTIAL | _O_BINARY); /* 読み込み専用、順次アクセス、バイナリ */ if(rd_fh == -1){ printf("ファイルオープンエラー(%s)\n", ifname); return(-1); } wt_fh = _open(ofname, _O_WRONLY | _O_CREAT | _O_TRUNC | _O_BINARY, _S_IREAD | _S_IWRITE); /* 書き込み専用、新規、既存破棄、バイナリ */ /* 属性:読み書き */ if(wt_fh == -1){ printf("ファイルオープンエラー(%s)\n", ofname); return(-1); } size = _read(rd_fh, buff, sizeof(buff)); while(ferr > 0){ ferr = _write(wt_fh, buff, size); /* ライト */ if(ferr == -1){ /* ファイル書き込み失敗の場合 */ printf("ファイルライトエラー RC=%d\n", ferr); break; } size = _read(rd_fh, buff, sizeof(buff)); } if(size == -1){ /* ファイル読み込み失敗の場合 */ printf("ファイルリードエラー\n"); } if(rd_fh != -1){ _close(rd_fh); /* ファイルを閉じる */ } if(wt_fh != -1){ _close(wt_fh); /* ファイルを閉じる */ } return(0); } }} !!!高水準ファイル処理 {{code Java,4, /* **************************************************************** */ /* * インクルードファイル定義 * */ /* **************************************************************** */ #include /* 標準 */ #include /* 標準 */ /* **************************************************************** */ /* * 高水準ファイル処理 * */ /* **************************************************************** */ int rw_hi_proc(const char *ifname, const char *ofname){ FILE *ifp, *ofp; /* ファイル管理 */ int size; /* 読み込みサイズ */ int ferr; /* 処理結果戻り値 */ char buff[512]; /* 格納場所 */ ifp = fopen(ifname, "rb"); if(ifp == (FILE *)NULL){ printf("ファイルオープンエラー(%s)\n", ifname); return(-1); } ofp = fopen(ofname, "wb"); if(ofp == (FILE *)NULL){ printf("ファイルオープンエラー(%s)\n", ofname); return(-1); } size = fread(buff, sizeof(buff), 1, ifp); while(feof(ifp) == 0 && ferror(ifp) == 0){ size = fwrite(buff, size, 1, ofp); if((ferror(ofp) != 0){ printf("ファイルライトエラー\n"); break; } size = fread(buff, sizeof(buff), 1, ifp); } if(ferror(ifp) != 0){ printf("ファイルリードエラー\n"); return(-1); } if(ofp != (FILE *)NULL){ ferr = fclose(ofp); /* ファイルを閉じる */ if(ferr != 0){ printf("ファイルクローズエラー(o)\n"); } } if(ifp != (FILE *)NULL){ ferr = fclose(ifp); /* ファイルを閉じる */ if(ferr != 0){ printf("ファイルクローズエラー(i)\n"); } } return(0); } }} !!!Win32APIファイル処理 {{code Java,4, /* **************************************************************** */ /* * インクルードファイル定義 * */ /* **************************************************************** */ #include /* 標準 */ #ifdef WIN32 /* Win32 のみ */ #include /* Win32APIファイル関数 */ #endif /* WIN32 */ /* **************************************************************** */ /* * Win32APIファイル処理 * */ /* **************************************************************** */ #ifdef WIN32 /* Win32 のみ */ int rw_ap_proc(const char *ifname, const char *ofname){ HANDLE wt_fh, rd_fh; /* ファイルハンドル */ int ferr; /* 処理結果戻り値 */ unsigned long rw_size; /* 読み込み(読み込まれた)サイズ */ char buff[512]; /* 格納場所 */ rd_fh = CreateFile(ifname, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if(rd_fh == INVALID_HANDLE_VALUE){ printf("ファイルオープンエラー\n"); return(-1); } wt_fh = CreateFile(ofname, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if(wt_fh == INVALID_HANDLE_VALUE){ printf("ファイルオープンエラー\n"); return(-1); } ferr = ReadFile(rd_fh, buff, sizeof(buff), &rw_size, NULL); while(ferr != 0 && rw_size != 0){ ferr = WriteFile(wt_fh, buff, rw_size, &rw_size, NULL); if(ferr == 0){ printf("ファイルライトエラー\n"); break; } ferr = ReadFile(rd_fh, buff, sizeof(buff), &rw_size, NULL); } if(rw_size != 0){ printf("ファイルリードエラー\n"); return(-1); } if(wt_fh != INVALID_HANDLE_VALUE){ ferr = CloseHandle(wt_fh); /* ファイルを閉じる */ if(ferr == 0){ printf("ファイルクローズエラー(o)\n"); return(-1); } } if(rd_fh != INVALID_HANDLE_VALUE){ ferr = CloseHandle(rd_fh); /* ファイルを閉じる */ if(ferr == 0){ printf("ファイルクローズエラー(i)\n"); return(-1); } } return(0); } #endif /* WIN32 */ }}