--- a/FileOperation.st Fri Jan 14 12:22:39 2005 +0100
+++ b/FileOperation.st Thu Jan 20 14:03:36 2005 +0100
@@ -1,3 +1,15 @@
+"
+ COPYRIGHT (c) 2003 by eXept Software AG
+ All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice. This software may not
+ be provided or otherwise made available to, or used by, any
+ other person. No title to or ownership of the software is
+ hereby transferred.
+"
+
"{ Package: 'stx:libtool2' }"
Object subclass:#FileOperation
@@ -28,6 +40,13 @@
privateIn:FileOperation
!
+FileOperation::Delete subclass:#Erase
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ privateIn:FileOperation
+!
+
FileOperation subclass:#Move
instanceVariableNames:'colOfMovedFiles'
classVariableNames:''
@@ -42,6 +61,21 @@
privateIn:FileOperation
!
+!FileOperation class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 2003 by eXept Software AG
+ All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice. This software may not
+ be provided or otherwise made available to, or used by, any
+ other person. No title to or ownership of the software is
+ hereby transferred.
+"
+! !
!FileOperation class methodsFor:'actions'!
@@ -84,69 +118,60 @@
^ Delete deleteFiles:colOfFiles confirm:confirm
!
+eraseFiles:colOfFiles confirm:confirm
+ ^ Erase deleteFiles:colOfFiles confirm:confirm
+!
+
moveFile:aSourceFile to:aDestFile
- ^ Move
- moveFile:aSourceFile to:aDestFile
+ ^ Move moveFile:aSourceFile to:aDestFile
!
moveFiles:aCollectionOfFiles to:aDestDirectory
- ^ Move
- moveFiles:aCollectionOfFiles to:aDestDirectory
+ ^ Move moveFiles:aCollectionOfFiles to:aDestDirectory
!
renameFile:filename to:newFileString
- ^ Rename
- renameFile:filename to:newFileString
+ ^ Rename renameFile:filename to:newFileString
!
renameFiles:aCollectionofFilenames
- ^ Rename
- renameFiles:aCollectionofFilenames
+ ^ Rename renameFiles:aCollectionofFilenames
! !
!FileOperation class methodsFor:'defaults'!
-copyMoveIfExistSuffixString
-
+suffixForCopyOverExistingFile
^ '.copy'
! !
!FileOperation methodsFor:'accessing'!
errorString
- "return the value of the static variable 'ErrorString' (automatically generated)"
-
^ errorString
!
errorString:something
- "set the value of the static variable 'ErrorString' (automatically generated)"
-
errorString := something.
!
result
- "return the value of the instance variable 'result' (automatically generated)"
-
^ result
!
result:something
- "set the value of the instance variable 'result' (automatically generated)"
-
result := something.
! !
!FileOperation methodsFor:'dialogs'!
-fileExistDialogForNewFile:newFile oldFile:oldFile withCancel:withCancel
+fileExistsDialogForNewFile:newFile oldFile:oldFile withCancel:withCancel
"return true, if the file should be moved/copied.
Ask user if oldFile exists."
- ^ self fileExistDialogForNewFile:newFile oldFile:oldFile withCancel:withCancel withRemoveIfSame:false.
+ ^ self fileExistsDialogForNewFile:newFile oldFile:oldFile withCancel:withCancel withRemoveIfSame:false.
!
-fileExistDialogForNewFile:newFile oldFile:oldFile withCancel:withCancel withRemoveIfSame:withRemoveIfSame
+fileExistsDialogForNewFile:newFile oldFile:oldFile withCancel:withCancel withRemoveIfSame:withRemoveIfSame
"return true, if the file should be moved/copied.
If oldFile exists, ask user.
If withRemoveIfSame is true, two additional possible values are returned:
@@ -215,9 +240,6 @@
!FileOperation::Copy class methodsFor:'actions'!
copyFile:aSourceFile to:aDestFile
- "delete current selected files/directories
- "
-
|instance|
instance := self new.
@@ -226,9 +248,6 @@
!
copyFile:aSourceFile to:aDestFile withOverWriteWarning:overWriteWarning
- "delete current selected files/directories
- "
-
|instance|
instance := self new.
@@ -237,9 +256,6 @@
!
copyFile:aSourceFile to:aDestFile withOverWriteWarning:overWriteWarningBoolean copyFileIfSame:copyIfSameBoolean
- "delete current selected files/directories
- "
-
|instance|
instance := self new.
@@ -248,9 +264,6 @@
!
copyFiles:aColOfSourceFiles to:aDirectory
- "delete current selected files/directories
- "
-
|instance|
instance := self new.
@@ -259,9 +272,6 @@
!
copyFiles:aColOfSourceFiles to:aDirectory withOverWriteWarning:overWriteWarning
- "delete current selected files/directories
- "
-
|instance|
instance := self new.
@@ -270,9 +280,6 @@
!
copyFiles:aColOfSourceFiles to:aDirectory withOverWriteWarning:overWriteWarning copyFileIfSame:copy
- "delete current selected files/directories
- "
-
|instance|
instance := self new.
@@ -283,8 +290,6 @@
!FileOperation::Copy methodsFor:'accessing'!
colOfCopiedFiles
- "return the value of the instance variable 'colOfCopiedFiles' (automatically generated)"
-
colOfCopiedFiles isNil ifTrue:[
colOfCopiedFiles := OrderedCollection new.
].
@@ -294,23 +299,14 @@
!FileOperation::Copy methodsFor:'actions'!
copyFile:aSourceFile to:aDestFile
- "defete current selected files/directories
- "
-
self copyFile:aSourceFile to:aDestFile withOverWriteWarning:true
!
copyFile:aSourceFile to:aDestFile withOverWriteWarning:overWriteWarning
- "copy to
- "
-
self copyFile:aSourceFile to:aDestFile withOverWriteWarning:true copyFileIfSame:true
!
copyFile:aSourceFile to:aDestFile withOverWriteWarning:overWriteWarningBoolean copyFileIfSame:copyIfSameBoolean
- "copy to
- "
-
|newFile fileString targetDirectory targetIsDirectory sourceIsDirectory suffix|
sourceIsDirectory := aSourceFile isDirectory.
@@ -332,12 +328,12 @@
((newFile asString = aSourceFile asString) and:[copyIfSameBoolean]) ifTrue:[
[newFile exists] whileTrue:[
suffix := newFile suffix.
- fileString := newFile baseName withoutSuffix, self class copyMoveIfExistSuffixString, '.', suffix.
+ fileString := newFile baseName withoutSuffix, self class suffixForCopyOverExistingFile, '.', suffix.
newFile := targetDirectory construct:fileString.
].
] ifFalse:[
overWriteWarningBoolean ifTrue:[
- (self fileExistDialogForNewFile:newFile oldFile:aSourceFile withCancel:false withRemoveIfSame:false) ifFalse:[
+ (self fileExistsDialogForNewFile:newFile oldFile:aSourceFile withCancel:false withRemoveIfSame:false) ifFalse:[
result := false.
^ self.
]
@@ -365,18 +361,14 @@
!
copyFiles:aColOfSourceFiles to:aDirectory
-
^ self copyFiles:aColOfSourceFiles to:aDirectory withOverWriteWarning:true.
!
copyFiles:aColOfSourceFiles to:aDirectory withOverWriteWarning:overWriteWarning
-
^ self copyFiles:aColOfSourceFiles to:aDirectory withOverWriteWarning:overWriteWarning copyFileIfSame:true.
!
copyFiles:aColOfSourceFiles to:aDirectory withOverWriteWarning:overWriteWarning copyFileIfSame:copy
-
-
|newFile suffix fileString sourceIsDirectory overWriteExisting|
(aDirectory exists) ifFalse:[
@@ -397,7 +389,7 @@
((newFile asString = filename asString) and:[copy]) ifTrue:[
[newFile exists] whileTrue:[
suffix := newFile suffix.
- fileString := newFile withoutSuffix baseName, self class copyMoveIfExistSuffixString.
+ fileString := newFile withoutSuffix baseName, self class suffixForCopyOverExistingFile.
suffix notEmpty ifTrue:[
fileString := fileString, '.', suffix.
].
@@ -405,7 +397,7 @@
].
] ifFalse:[
overWriteWarning ifTrue:[
- overWriteExisting := (self fileExistDialogForNewFile:newFile oldFile:filename withCancel:(aColOfSourceFiles size > 1) withRemoveIfSame:false).
+ overWriteExisting := (self fileExistsDialogForNewFile:newFile oldFile:filename withCancel:(aColOfSourceFiles size > 1) withRemoveIfSame:false).
overWriteExisting isNil ifTrue:[
" abort pressed "
result := false.
@@ -497,14 +489,10 @@
!FileOperation::Create methodsFor:'accessing'!
createdFile
- "return the value of the instance variable 'createdFile' (automatically generated)"
-
^ createdFile
!
createdFile:something
- "set the value of the instance variable 'createdFile' (automatically generated)"
-
createdFile := something.
! !
@@ -746,8 +734,7 @@
!FileOperation::Delete class methodsFor:'actions'!
deleteFile:aFileOrDirectory
- "delete current selected files/directories
- "
+ "delete aFileOrDirectory"
|instance|
@@ -756,27 +743,23 @@
^ instance
!
-deleteFiles:aColOfFiles
- "delete current selected files/directories
- "
- ^ self deleteFiles:aColOfFiles confirm:true
+deleteFiles:aCollectionOfFiles
+ ^ self deleteFiles:aCollectionOfFiles confirm:true
!
-deleteFiles:aColOfFiles confirm:confirm
- "delete current selected files/directories
- "
+deleteFiles:aCollectionOfFiles confirm:confirm
+ "delete aCollectionOfFiles"
|instance|
instance := self new.
- instance deleteFiles:aColOfFiles confirm:confirm.
+ instance deleteFiles:aCollectionOfFiles confirm:confirm.
^ instance
! !
!FileOperation::Delete methodsFor:'actions'!
deleteFile:aFileOrDirectory
-
| file isDirectory |
aFileOrDirectory notNil ifTrue:[
@@ -787,13 +770,16 @@
Error handle:[:ex|
"was not able to remove it"
Dialog warn:(ex description, '\' withCRs, ex signal notifierString).
-"/ Smalltalk beep.
self errorString:(ex description, ' - ', ex signal notifierString).
result := false.
^ self.
] do:[
- isDirectory ifTrue:[file recursiveRemove] ifFalse:[file remove].
-
+ isDirectory ifTrue:[
+ file recursiveRemove
+ ] ifFalse:[
+ self eraseFilesContentsBeforeRemoving:file.
+ file remove
+ ].
].
"/ flush parent directory or directory
].
@@ -804,14 +790,10 @@
!
deleteFiles:colOfFiles
- "delete current selected files/directories
- "
^ self deleteFiles:colOfFiles confirm:true.
!
deleteFiles:colOfFiles confirm:confirm
- "delete current selected files/directories
- "
|resources answer nFilesToDelete ask labels values fileTypeString msg lbls vals|
ask := confirm.
@@ -905,14 +887,44 @@
].
].
].
+!
+
+eraseFilesContentsBeforeRemoving:file
+ "intentionally left blank"
+! !
+
+!FileOperation::Erase methodsFor:'actions'!
+
+eraseFilesContentsBeforeRemoving
+ "fill file with zeros"
+
+ self halt.
+!
+
+eraseFilesContentsBeforeRemoving:file
+ "fill file with zeros (to be really erased from the disk)"
+
+ |writeStream fileSize remaining buffer bufferSize nWritten|
+
+ fileSize := file fileSize.
+ writeStream := file asFilename readWriteStream.
+
+ remaining := fileSize.
+ bufferSize := 8192.
+ buffer := ByteArray new:bufferSize.
+ [remaining > 0] whileTrue:[
+ nWritten := writeStream
+ nextPutBytes:(bufferSize min:remaining)
+ from:buffer
+ startingAt:1.
+ remaining := remaining - nWritten.
+ ].
+ writeStream close.
! !
!FileOperation::Move class methodsFor:'actions'!
moveFile:aSourceFile to:aDestFile
- "delete current selected files/directories
- "
-
|instance|
instance := self new.
@@ -921,9 +933,6 @@
!
moveFile:aSourceFile to:aDestFile withOverWriteWarning:overWriteWarning
- "delete current selected files/directories
- "
-
|instance|
instance := self new.
@@ -932,9 +941,6 @@
!
moveFile:aSourceFile to:aDestFile withOverWriteWarning:overWriteWarning moveFileIfSame:move
- "delete current selected files/directories
- "
-
|instance|
instance := self new.
@@ -943,9 +949,6 @@
!
moveFiles:aColOfSourceFiles to:aDirectory
- "delete current selected files/directories
- "
-
|instance|
instance := self new.
@@ -954,9 +957,6 @@
!
moveFiles:aColOfSourceFiles to:aDirectory withOverWriteWarning:overWriteWarning
- "delete current selected files/directories
- "
-
|instance|
instance := self new.
@@ -965,9 +965,6 @@
!
moveFiles:aColOfSourceFiles to:aDirectory withOverWriteWarning:overWriteWarning moveFileIfSame:move
- "delete current selected files/directories
- "
-
|instance|
instance := self new.
@@ -978,8 +975,6 @@
!FileOperation::Move methodsFor:'accessing'!
colOfMovedFiles
- "return the value of the instance variable 'colOfMovedFiles' (automatically generated)"
-
colOfMovedFiles isNil ifTrue:[
colOfMovedFiles := OrderedCollection new.
].
@@ -1020,12 +1015,12 @@
((newFile asString = aSourceFile asString) and:[move]) ifTrue:[
[newFile exists] whileTrue:[
suffix := newFile suffix.
- fileString := newFile baseName withoutSuffix, self class copyMoveIfExistSuffixString, '.', suffix.
+ fileString := newFile baseName withoutSuffix, self class suffixForCopyOverExistingFile, '.', suffix.
newFile := targetDirectory construct:fileString.
].
] ifFalse:[
overWriteWarning ifTrue:[
- doMove := self fileExistDialogForNewFile:newFile oldFile:aSourceFile withCancel:false withRemoveIfSame:true.
+ doMove := self fileExistsDialogForNewFile:newFile oldFile:aSourceFile withCancel:false withRemoveIfSame:true.
doMove == #removeSource ifTrue:[
self halt.
result := false.
@@ -1106,12 +1101,12 @@
((newFile asString = filename asString) and:[move]) ifTrue:[
[newFile exists] whileTrue:[
suffix := newFile suffix.
- fileString := newFile withoutSuffix baseName , self class copyMoveIfExistSuffixString, '.', suffix.
+ fileString := newFile withoutSuffix baseName , self class suffixForCopyOverExistingFile, '.', suffix.
newFile := aDirectory construct:fileString.
].
] ifFalse:[
overWriteWarning ifTrue:[
- doMove := self fileExistDialogForNewFile:newFile oldFile:filename withCancel:(aColOfSourceFiles size > 1) withRemoveIfSame:true.
+ doMove := self fileExistsDialogForNewFile:newFile oldFile:filename withCancel:(aColOfSourceFiles size > 1) withRemoveIfSame:true.
doMove isNil ifTrue:[ "/ cancel
result := false.
^ self.
@@ -1166,9 +1161,6 @@
!FileOperation::Rename class methodsFor:'actions'!
renameFile:oldFile to:newName
- "move from to
- "
-
|instance|
instance := self new.
@@ -1177,9 +1169,6 @@
!
renameFiles:aColOfFiles
- "move from to
- "
-
|instance|
instance := self new.
@@ -1190,8 +1179,6 @@
!FileOperation::Rename methodsFor:'accessing'!
renamedFiles
- "return the value of the instance variable 'lastRenamedFile' (automatically generated)"
-
renamedFiles isNil ifTrue:[
renamedFiles := OrderedCollection new.
].
@@ -1256,8 +1243,6 @@
!
renameFiles:aColOfFiles
- "rename the selected file(s)"
-
|resources queryBox b lastNewName lastOldName initialText oldName newName renameAll doRename|
resources := AbstractFileBrowser classResources.
@@ -1300,5 +1285,5 @@
!FileOperation class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libtool/FileOperation.st,v 1.63 2004-12-13 22:09:01 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libtool/FileOperation.st,v 1.64 2005-01-20 13:03:36 cg Exp $'
! !