]> git.tdb.fi Git - libs/core.git/blobdiff - source/file.cpp
Recognize FileNotFound on win32
[libs/core.git] / source / file.cpp
index a22b832be46a4f56179544fa96cc2cc0d8de331b..6ef338888b24b610b0d61f7bcaa06d9fec2594fa 100644 (file)
@@ -57,7 +57,13 @@ File::File(const string &fn, Mode m, CreateMode cm)
 
        handle=CreateFile(fn.c_str(), flags, 0, 0, create_flags, FILE_ATTRIBUTE_NORMAL, 0);
        if(handle==INVALID_HANDLE_VALUE)
 
        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)
 #else
        int flags=0;
        switch(mode&M_RDWR)
@@ -105,7 +111,7 @@ void File::close()
 
        set_events(P_NONE);
 
 
        set_events(P_NONE);
 
-       signal_closing.emit();
+       signal_flush_required.emit();
 
 #ifdef WIN32
        CloseHandle(handle);
 
 #ifdef WIN32
        CloseHandle(handle);
@@ -134,6 +140,15 @@ void File::set_block(bool b)
 #endif
 }
 
 #endif
 }
 
+void File::sync()
+{
+#ifndef WIN32
+       signal_flush_required.emit();
+
+       fsync(handle);
+#endif
+}
+
 /**
 Seeks the file to the given byte offset.
 
 /**
 Seeks the file to the given byte offset.
 
@@ -146,6 +161,8 @@ int File::seek(int off, SeekType st)
 {
        check_access(M_NONE);
 
 {
        check_access(M_NONE);
 
+       signal_flush_required.emit();
+
        int type=sys_seek_type(st);
 #ifdef WIN32
        DWORD ret=SetFilePointer(handle, off, 0, type);
        int type=sys_seek_type(st);
 #ifdef WIN32
        DWORD ret=SetFilePointer(handle, off, 0, type);
@@ -232,13 +249,6 @@ unsigned File::do_write(const char *buf, unsigned size)
        return ret;
 }
 
        return ret;
 }
 
-void File::sync()
-{
-#ifndef WIN32
-       fsync(handle);
-#endif
-}
-
 /**
 Reads data from the file.
 
 /**
 Reads data from the file.