@@ -355,11 +355,13 @@ BOOL Win32SequentialFile::_Init()
355355 ToWidePath (_filename, path);
356356 _hFile = CreateFileW (path.c_str (),
357357 GENERIC_READ,
358- FILE_SHARE_READ,
358+ FILE_SHARE_READ | FILE_SHARE_WRITE ,
359359 NULL ,
360360 OPEN_EXISTING,
361- FILE_ATTRIBUTE_NORMAL,
361+ FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN ,
362362 NULL );
363+ if (_hFile == INVALID_HANDLE_VALUE)
364+ _hFile = NULL ;
363365 return _hFile ? TRUE : FALSE ;
364366}
365367
@@ -403,7 +405,7 @@ BOOL Win32RandomAccessFile::_Init( LPCWSTR path )
403405{
404406 BOOL bRet = FALSE ;
405407 if (!_hFile)
406- _hFile = ::CreateFileW (path,GENERIC_READ,FILE_SHARE_READ,NULL ,OPEN_EXISTING,
408+ _hFile = ::CreateFileW (path,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE ,NULL ,OPEN_EXISTING,
407409 FILE_ATTRIBUTE_NORMAL | FILE_FLAG_RANDOM_ACCESS,NULL );
408410 if (!_hFile || _hFile == INVALID_HANDLE_VALUE )
409411 _hFile = NULL ;
@@ -669,7 +671,7 @@ Status Win32Env::GetFileSize( const std::string& fname, uint64_t* file_size )
669671 ToWidePath (ModifyPath (path), wpath);
670672
671673 HANDLE file = ::CreateFileW (wpath.c_str (),
672- GENERIC_READ,FILE_SHARE_READ,NULL ,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL );
674+ GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE ,NULL ,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL );
673675 LARGE_INTEGER li;
674676 if (::GetFileSizeEx (file,&li)){
675677 *file_size = (uint64_t )li.QuadPart ;
0 commit comments