handle=CreateFile(fn.c_str(), flags, 0, 0, create_flags, FILE_ATTRIBUTE_NORMAL, 0);
if(handle==INVALID_HANDLE_VALUE)
- throw SystemError(format("Can't open file '%s'", fn), GetLastError());
+ {
+ int err=GetLastError();
+ if(err==ERROR_FILE_NOT_FOUND)
+ throw FileNotFound("Can't find file "+fn, fn);
+ else
+ throw SystemError(format("Can't open file '%s'", fn), GetLastError());
+ }
#else
int flags=0;
switch(mode&M_RDWR)
set_events(P_NONE);
- signal_closing.emit();
+ signal_flush_required.emit();
#ifdef WIN32
CloseHandle(handle);
#endif
}
+void File::sync()
+{
+#ifndef WIN32
+ signal_flush_required.emit();
+
+ fsync(handle);
+#endif
+}
+
/**
Seeks the file to the given byte offset.
{
check_access(M_NONE);
+ signal_flush_required.emit();
+
int type=sys_seek_type(st);
#ifdef WIN32
DWORD ret=SetFilePointer(handle, off, 0, type);
return ret;
}
-void File::sync()
-{
-#ifndef WIN32
- fsync(handle);
-#endif
-}
-
/**
Reads data from the file.