ERROR: file-delete-failed path error ;
+: delete-file-throws ( path -- )
+ DeleteFile win32-error=0/f ;
+
+: delete-read-only-file ( path -- )
+ [ set-file-normal-attribute ] [ delete-file-throws ] bi ;
+
+: (delete-file) ( path -- )
+ dup DeleteFile 0 = [
+ GetLastError ERROR_ACCESS_DENIED =
+ [ delete-read-only-file ] [ win32-error ] if
+ ] [ drop ] if ;
+
M: windows delete-file ( path -- )
- [ normalize-path DeleteFile win32-error=0/f ]
+ normalize-path
+ [ (delete-file) ]
[ \ file-delete-failed boa rethrow ] recover ;
M: windows copy-file ( from to -- )
+sparse-file+ +reparse-point+ +compressed+ +offline+
+not-content-indexed+ +encrypted+ ;
+: read-only? ( file-info -- ? )
+ attributes>> +read-only+ swap member? ;
+
+: set-file-attributes ( path flags -- )
+ SetFileAttributes win32-error=0/f ;
+
+: set-file-normal-attribute ( path -- )
+ FILE_ATTRIBUTE_NORMAL set-file-attributes ;
+
: win32-file-attribute ( n symbol attr -- )
rot mask? [ , ] [ drop ] if ;
! FUNCTION: SetFileApisToANSI
! FUNCTION: SetFileApisToOEM
! FUNCTION: SetFileAttributesA
-! FUNCTION: SetFileAttributesW
+FUNCTION: BOOL SetFileAttributesW ( LPCTSTR lpFileName, DWORD dwFileAttributes ) ;
+ALIAS: SetFileAttributes SetFileAttributesW
FUNCTION: DWORD SetFilePointer ( HANDLE hFile, LONG lDistanceToMove, PLONG lpDistanceToMoveHigh, DWORD dwMoveMethod ) ;
FUNCTION: DWORD SetFilePointerEx ( HANDLE hFile, LARGE_INTEGER lDistanceToMove, PLARGE_INTEGER lpDistanceToMoveHigh, DWORD dwMoveMethod ) ;
! FUNCTION: SetFileShortNameA