added newTemporary with template
authorClaus Gittinger <cg@exept.de>
Tue, 26 Nov 2002 11:06:34 +0100
changeset 6893 9aa286d3a644
parent 6892 f25449fa7a84
child 6894 64f27ed2753f
added newTemporary with template
Filename.st
--- a/Filename.st	Tue Nov 26 11:00:38 2002 +0100
+++ b/Filename.st	Tue Nov 26 11:06:34 2002 +0100
@@ -468,36 +468,7 @@
      whatever to it in order to really create something).
      See also: #newTemporary which looks for a good temp directory."
 
-    |pid nameString fn|
-
-    (self ~~ ConcreteClass) ifTrue:[
-	^ ConcreteClass newTemporaryIn:aDirectoryPrefix
-    ].
-
-    "/ care for existing leftOver tempFiles
-    "/ from a previous boot of the OS
-    "/ (i.e. my pid could be the same as when executed
-    "/  the last time before system reboot ...)
-
-    [fn isNil or:[fn exists]] whileTrue:[
-	"/ although the above allows things to be redefined in concrete classes,
-	"/ the following should work on all systems ...
-
-	NextTempFilenameIndex isNil ifTrue:[
-	    NextTempFilenameIndex := 1.
-	].
-
-	pid := OperatingSystem getProcessId printString.
-	nameString := (self tempFileNameTemplate) bindWith:pid with:(NextTempFilenameIndex printString).
-	NextTempFilenameIndex := NextTempFilenameIndex + 1.
-
-	(aDirectoryPrefix isNil or:[aDirectoryPrefix asString isEmpty]) ifFalse:[
-	    fn := aDirectoryPrefix asFilename construct:nameString
-	] ifTrue:[
-	    fn := self named:nameString
-	]
-    ].
-    ^ fn
+    ^ self newTemporaryIn:aDirectoryPrefix nameTemplate:self tempFileNameTemplate
 
     "temp files in '/tmp':
 
@@ -525,6 +496,73 @@
     "Modified: / 11.8.1998 / 22:51:43 / cg"
 !
 
+newTemporaryIn:aDirectoryPrefix nameTemplate:template
+    "return a new unique filename - use this for temporary files.
+     The filenames returned are in aDirectoryPrefix and named after the given template,
+     in which %1 and %2 are expanded to the unix process id, and a unique number, incremented 
+     with every call to this method respectively.
+     Notice: only a unique filename object is created and returned - no physical
+     file is created by this method (i.e. you have to send #writeStream or
+     whatever to it in order to really create something).
+     See also: #newTemporary which looks for a good temp directory."
+
+    |pid nameString fn|
+
+    (self ~~ ConcreteClass) ifTrue:[
+        ^ ConcreteClass newTemporaryIn:aDirectoryPrefix nameTemplate:template
+    ].
+
+    "/ care for existing leftOver tempFiles
+    "/ from a previous boot of the OS
+    "/ (i.e. my pid could be the same as when executed
+    "/  the last time before system reboot ...)
+
+    [fn isNil or:[fn exists]] whileTrue:[
+        "/ although the above allows things to be redefined in concrete classes,
+        "/ the following should work on all systems ...
+
+        NextTempFilenameIndex isNil ifTrue:[
+            NextTempFilenameIndex := 1.
+        ].
+
+        pid := OperatingSystem getProcessId printString.
+        nameString := template bindWith:pid with:(NextTempFilenameIndex printString).
+        NextTempFilenameIndex := NextTempFilenameIndex + 1.
+
+        (aDirectoryPrefix isNil or:[aDirectoryPrefix asString isEmpty]) ifFalse:[
+            fn := aDirectoryPrefix asFilename construct:nameString
+        ] ifTrue:[
+            fn := self named:nameString
+        ]
+    ].
+    ^ fn
+
+    "temp files in '/tmp':
+
+     Filename newTemporary    
+    "
+
+    "temp files somewhere 
+     (not recommended - use above since it can be controlled via shell variables):
+
+     UnixFilename newTemporaryIn:'/tmp'     nameTemplate:'foo%1_%2'    
+     UnixFilename newTemporaryIn:'/tmp'     nameTemplate:'foo%1_%2'  
+     UnixFilename newTemporaryIn:'/usr/tmp' nameTemplate:'foo%1_%2'    
+     UnixFilename newTemporaryIn:'/'        nameTemplate:'foo%1_%2' 
+    "
+
+    "a local temp file:
+
+     Filename newTemporaryIn:''             nameTemplate:'foo%1_%2' 
+     Filename newTemporaryIn:nil            nameTemplate:'foo%1_%2' 
+     Filename newTemporaryIn:'.'            nameTemplate:'foo%1_%2' 
+     Filename newTemporaryIn:('source' asFilename) nameTemplate:'foo%1_%2' 
+    "
+
+    "Modified: / 7.9.1995 / 10:48:31 / claus"
+    "Modified: / 11.8.1998 / 22:51:43 / cg"
+!
+
 nullDevice
     "return the filename of the nullDevice (if available).
      returns nil, if the OperatingSystem does not support this."
@@ -4516,7 +4554,7 @@
 !Filename class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Filename.st,v 1.231 2002-11-08 16:15:46 penk Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Filename.st,v 1.232 2002-11-26 10:06:34 cg Exp $'
 ! !
 
 Filename initialize!