Przede wszystkim nie trzeba otwierać pliku, żeby sprawdzić czy istnieje. Można zwyczajnie użyć funkcji PathFileExists
z Shlpwapi.h
(trzeba dołączyć Shlpwapi.lib
).
W każdym razie, jak chcesz korzystać z win api to wypadałoby 1. nauczyć się korzystać z dokumentacji, 2. ogarnąć podstawy. Będziesz popełniał takie głupie błędy dopóki nie będziesz wiedział, że LP
w nazwie typu oznacza, że to tylko wskaźnik, a W
na końcu typu lub funkcji oznacza, że to wersja unicode i nie powinno się mieszać tych typów (najlepiej korzystać z makr, które nie mają na końcu ani W ani A i same dokleją co trzeba na podstawie zdefiniowanych makr UNICODE
i _UNICODE
). Napis w C to niby char*
, a w win api mamy LPSTR
, LPTSTR
, LPCTSTR
, LPWSTR
i tak dalej; mamy makro TEXT, mamy prefiks L.
Jak będziesz rzutował wszystko na podstawie rzutu kością to niewiele ci wyjdzie.
#include <cstdio>
#include <Windows.h>
#include <tchar.h>
#include <Shlwapi.h>
int main()
{
LPCTSTR file_name = TEXT("C:\\costam.txt");
_tprintf(TEXT("File \"%s\" %s.\n"), file_name, PathFileExists(file_name) ? TEXT("exists") : TEXT("does not exist"));
WIN32_FIND_DATA find_data;
HANDLE handle;
if((handle = FindFirstFile(file_name, &find_data)) == INVALID_HANDLE_VALUE)
return GetLastError() == ERROR_FILE_NOT_FOUND ? 1 : 2;
FindClose(handle);
unsigned long long file_size = find_data.nFileSizeHigh * (MAXDWORD + 1) + find_data.nFileSizeLow;
_tprintf(TEXT("File size of \"%s\" is %d bytes.\n"), file_name, file_size);
return 0;
}
Kod jest zgodny i z ANSI i z Unicode.