Windows C でファイル読み込み
非常になんとなく Windows の C でファイル読み込みするサンプル書いたので、忘れないようにメモ。
とりあえず以下の感じで・・・プログラム引数でごちゃごちゃ条件分岐させてるのは「共有モード」関連でちょっと調べたいことがあったからです。普通にファイル読み込むだけならこのあたりは無くても。
■ WinFileTest.c
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <Windows.h> #pragma comment(lib, "kernel32.lib") HANDLE openFile(DWORD shareMode); void readFile(HANDLE hFile); void main(int argc, char *argv[]) { DWORD shareMode; HANDLE hFile; if(argc != 2) { exit(-1); } if(strcmp(argv[1],"ex") == 0) { shareMode = 0; } else if (strcmp(argv[1],"read") == 0) { shareMode = FILE_SHARE_READ; } else if (strcmp(argv[1],"write") == 0) { shareMode = FILE_SHARE_WRITE; } else { exit(-1); } hFile = openFile(shareMode); getchar(); readFile(hFile); } HANDLE openFile(DWORD shareMode) { HANDLE hFile; hFile = CreateFile("hoge.txt", GENERIC_READ, shareMode, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if(hFile == INVALID_HANDLE_VALUE ) { printf("CreateFile Error !!\n"); printf("%s:%d\n", "errorcode", GetLastError()); exit(-1); } return hFile; } void readFile(HANDLE hFile) { LPVOID lpBuffer; DWORD readBuffer = 256; lpBuffer = (LPVOID)malloc(GetFileSize(hFile , NULL)); if(0 == ReadFile(hFile, lpBuffer, readBuffer, &readBuffer, NULL)) { printf("ReadFile Error !!\n"); printf("%s:%d\n", "errorcode", GetLastError()); exit(-1); } printf("%s\n", lpBuffer); }
・CreateFile 関数
https://msdn.microsoft.com/ja-jp/library/Cc429198.aspx
・ReadFile 関数
https://msdn.microsoft.com/ja-jp/library/Cc429679.aspx
・GetFileSize 関数
https://msdn.microsoft.com/ja-jp/library/Cc429319.aspx
ん~長らく C サボったせいで非常に手こずりました。やっぱり手に馴染むまでは定期的に書かないとダメですね・・・
「ファイル書き込み」バージョンはお暇なときにやろう。
以上です。