FileURI.st
author Claus Gittinger <cg@exept.de>
Sat, 02 May 2020 21:40:13 +0200
changeset 5476 7355a4b11cb6
parent 4182 4c84b6a60de4
permissions -rw-r--r--
#FEATURE by cg class: Socket class added: #newTCPclientToHost:port:domain:domainOrder:withTimeout: changed: #newTCPclientToHost:port:domain:withTimeout:
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1309
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
     1
"
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
     2
 COPYRIGHT (c) 2002 by eXept Software AG
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
     3
              All Rights Reserved
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
     4
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
     5
 This software is furnished under a license and may be used
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
     6
 only in accordance with the terms of that license and with the
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
     8
 be provided or otherwise made available to, or used by, any
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
     9
 other person.  No title to or ownership of the software is
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
    10
 hereby transferred.
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
    11
"
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    12
"{ Package: 'stx:libbasic2' }"
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    13
4182
4c84b6a60de4 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 3453
diff changeset
    14
"{ NameSpace: Smalltalk }"
4c84b6a60de4 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 3453
diff changeset
    15
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    16
HierarchicalURI subclass:#FileURI
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    17
	instanceVariableNames:''
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    18
	classVariableNames:''
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    19
	poolDictionaries:''
1310
948ed141b0b7 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1309
diff changeset
    20
	category:'Net-Resources'
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    21
!
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    22
1309
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
    23
!FileURI class methodsFor:'documentation'!
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
    24
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
    25
copyright
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
    26
"
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
    27
 COPYRIGHT (c) 2002 by eXept Software AG
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
    28
              All Rights Reserved
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
    29
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
    30
 This software is furnished under a license and may be used
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
    31
 only in accordance with the terms of that license and with the
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
    32
 inclusion of the above copyright notice.   This software may not
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
    33
 be provided or otherwise made available to, or used by, any
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
    34
 other person.  No title to or ownership of the software is
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
    35
 hereby transferred.
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
    36
"
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
    37
! !
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    38
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    39
!FileURI class methodsFor:'instance creation'!
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    40
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    41
fromFilename:aFilename
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    42
    "create an URI based on an a filename"
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    43
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    44
    ^ self new fromFilename:aFilename
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    45
! !
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    46
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    47
!FileURI class methodsFor:'accessing'!
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    48
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    49
schemes
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    50
    "answer the list of supported schemes"
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    51
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    52
    ^ #(file)
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    53
! !
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    54
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    55
!FileURI methodsFor:'converting'!
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    56
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    57
asFilename
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    58
    "answer the receiver represented as filename"
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    59
4182
4c84b6a60de4 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 3453
diff changeset
    60
    ^ authority notEmptyOrNil ifTrue:[
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    61
        Filename remoteHost:authority rootComponents:pathSegments.
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    62
    ] ifFalse:[
4182
4c84b6a60de4 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 3453
diff changeset
    63
        isAbsolute ifTrue:[
4c84b6a60de4 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 3453
diff changeset
    64
            Filename rootComponents:pathSegments.
1268
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
    65
        ] ifFalse:[
4182
4c84b6a60de4 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 3453
diff changeset
    66
            Filename fromComponents:pathSegments.
1268
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
    67
        ].
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    68
    ].
1268
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
    69
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
    70
    "
4182
4c84b6a60de4 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 3453
diff changeset
    71
        (URI fromString:'file:///dir/file') asFilename
4c84b6a60de4 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 3453
diff changeset
    72
        (URI fromString:'file:///C:dir/file') asFilename
4c84b6a60de4 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 3453
diff changeset
    73
        (URI fromString:'file:///C:/dir/file') asFilename
4c84b6a60de4 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 3453
diff changeset
    74
        (URI fromString:'file:///~/bla') asFilename
4c84b6a60de4 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 3453
diff changeset
    75
        (URI fromString:'file:///~root/bla') asFilename 
4c84b6a60de4 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 3453
diff changeset
    76
        (URI fromString:'file:////host/dir/file') asFilename 
1268
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
    77
    "
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    78
! !
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    79
1374
85c524889e47 category rename
Claus Gittinger <cg@exept.de>
parents: 1310
diff changeset
    80
!FileURI methodsFor:'initialization'!
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    81
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    82
fromFilename:aFilename
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    83
    "create an URI based on an a filename"
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    84
4182
4c84b6a60de4 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 3453
diff changeset
    85
    |volume|
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    86
4182
4c84b6a60de4 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 3453
diff changeset
    87
    pathSegments := aFilename components.
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    88
    aFilename isAbsolute ifTrue:[
4182
4c84b6a60de4 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 3453
diff changeset
    89
        (pathSegments notEmpty and:[pathSegments first startsWith:'\\']) ifTrue:[
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    90
            "this is a MS-Windows network path: \\host\path"
4182
4c84b6a60de4 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 3453
diff changeset
    91
            isAbsolute := false. "there are already enogh / in the first pathComponent"
4c84b6a60de4 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 3453
diff changeset
    92
            pathSegments at:1 put:(pathSegments first replaceAll:$\ with:$/).
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    93
        ] ifFalse:[
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    94
            "this is an absolute path"
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    95
            isAbsolute := true.
4182
4c84b6a60de4 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 3453
diff changeset
    96
            volume := aFilename volume.
4c84b6a60de4 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 3453
diff changeset
    97
            volume notEmpty ifTrue:[
4c84b6a60de4 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 3453
diff changeset
    98
                pathSegments at:1 put:volume.
4c84b6a60de4 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 3453
diff changeset
    99
            ].
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   100
        ].
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   101
    ] ifFalse:[
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   102
        "this is a relative path"
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   103
        isAbsolute := false.
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   104
    ]
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   105
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   106
    "
1258
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   107
      self fromFilename:'/a/b/c'  asFilename   
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   108
      self fromFilename:'//a/b/c' asFilename  
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   109
      self fromFilename:'a/b/c'   asFilename    
4182
4c84b6a60de4 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 3453
diff changeset
   110
4c84b6a60de4 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 3453
diff changeset
   111
      self fromFilename:'\a\b\c'  asFilename   
4c84b6a60de4 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 3453
diff changeset
   112
      self fromFilename:'~user\a\b\c'  asFilename   
4c84b6a60de4 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 3453
diff changeset
   113
      self fromFilename:'C:\a\b\c'  asFilename   
4c84b6a60de4 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 3453
diff changeset
   114
      self fromFilename:'\\a\b\c'  asFilename 
4c84b6a60de4 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 3453
diff changeset
   115
      self fromFilename:'a\b\c'   asFilename    
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   116
    "
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   117
! !
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   118
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   119
!FileURI methodsFor:'queries'!
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   120
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   121
exists
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   122
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   123
    ^ self asFilename exists
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   124
! !
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   125
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   126
!FileURI methodsFor:'stream access'!
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   127
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   128
readStream
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   129
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   130
    ^ self asFilename readStream
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   131
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   132
    "
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   133
     'file:/etc/group' asURI readStream contents
1268
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   134
     'file:/~/.profile' asURI readStream contents
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   135
     (URI fromString:'file:~/.profile') asFilename
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   136
     (URI fromString:'file:~/.profile') readStream upToEnd
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   137
    "
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   138
!
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   139
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   140
readStreamDo:aBlock
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   141
    "evaluate a block with the read stream as first argument
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   142
     and a dictionary containing attributes as second argument.
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   143
     The stream is closed after aBlock has been evaluated."
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   144
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   145
    |attributes file stream|
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   146
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   147
    attributes := self class attributes.
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   148
    file := self asFilename.
1519
60bb9cc8727e comments
Stefan Vogel <sv@exept.de>
parents: 1436
diff changeset
   149
    attributes at:#fileSize put:file fileSize.
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   150
    attributes at:#baseName put:file baseName.  
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   151
    attributes at:#uriInfo  put:self printString.  
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   152
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   153
    ^ [ 
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   154
        stream := file readStream.
3453
a49af911b6e0 class: FileURI
Stefan Vogel <sv@exept.de>
parents: 2871
diff changeset
   155
        aBlock value:stream optionalArgument:attributes
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   156
     ] ensure:[
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   157
        stream notNil ifTrue:[stream close]
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   158
     ].
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   159
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   160
    "
1519
60bb9cc8727e comments
Stefan Vogel <sv@exept.de>
parents: 1436
diff changeset
   161
     '/etc/group' asURI readStreamDo:[:stream :attributes|
60bb9cc8727e comments
Stefan Vogel <sv@exept.de>
parents: 1436
diff changeset
   162
        stream contents         
60bb9cc8727e comments
Stefan Vogel <sv@exept.de>
parents: 1436
diff changeset
   163
                addFirst:attributes printString; 
60bb9cc8727e comments
Stefan Vogel <sv@exept.de>
parents: 1436
diff changeset
   164
                yourself
60bb9cc8727e comments
Stefan Vogel <sv@exept.de>
parents: 1436
diff changeset
   165
     ].
60bb9cc8727e comments
Stefan Vogel <sv@exept.de>
parents: 1436
diff changeset
   166
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   167
     'file:/etc/group' asURI readStreamDo:[:stream :attributes|
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   168
        stream contents         
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   169
                addFirst:attributes printString; 
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   170
                yourself
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   171
     ].
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   172
    "
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   173
!
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   174
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   175
readStreamsDo:aBlock
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   176
    "evaluate the block with a Collection of streams as first argument
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   177
     and a dictionary containing attributes as second argument,
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   178
     - a collection with a stream on a single file,
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   179
     - or a collection with streams on a directorie's files, but not recursive"
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   180
2474
38de996b9ee0 SSH-SFTP support
Stefan Vogel <sv@exept.de>
parents: 1519
diff changeset
   181
    self readStreamsDo:aBlock filterBlock:nil renameBlock:nil.
1258
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   182
!
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   183
2474
38de996b9ee0 SSH-SFTP support
Stefan Vogel <sv@exept.de>
parents: 1519
diff changeset
   184
readStreamsDo:aBlock filterBlock:oneArgFilterBlock renameBlock:renameBlock
1258
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   185
    "evaluate the block with a Collection of streams as first argument
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   186
     and a dictionary containing attributes as second argument,
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   187
     - a collection with a stream on a single file,
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   188
     - or a collection with streams on a directories files, but not recursive"
1258
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   189
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   190
    |attributes fn files list baseName|
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   191
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   192
    fn := self asFilename.
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   193
    files := OrderedCollection new.
1264
650132956801 allow '*' and '*.' in path
tm
parents: 1258
diff changeset
   194
    list := OrderedCollection new.
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   195
    attributes := self class attributes.
1264
650132956801 allow '*' and '*.' in path
tm
parents: 1258
diff changeset
   196
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   197
    fn isDirectory ifTrue:[
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   198
        attributes at:#requestDirectory put:true.
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   199
        fn directoryContentsAsFilenamesDo:[:eachFilename|
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   200
            eachFilename isDirectory ifFalse:[
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   201
                files add:eachFilename
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   202
            ].
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   203
        ].
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   204
    ] ifFalse:[
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   205
        baseName := fn baseName.
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   206
        (baseName includesAny:'*?[]') ifTrue:[ |directoryName|
1264
650132956801 allow '*' and '*.' in path
tm
parents: 1258
diff changeset
   207
            attributes at:#requestDirectory put:true.
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   208
            directoryName := fn directory.
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   209
            directoryName directoryContentsDo:[:eachFilenameString|
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   210
                (baseName match:eachFilenameString) ifTrue:[ |filename|
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   211
                    filename := directoryName construct:eachFilenameString.
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   212
                    filename isDirectory ifFalse:[
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   213
                        files add:(directoryName construct:eachFilenameString).
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   214
                    ].
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   215
                ].
1264
650132956801 allow '*' and '*.' in path
tm
parents: 1258
diff changeset
   216
            ].
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   217
        ] ifFalse:[
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   218
            attributes at:#requestDirectory put:false.
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   219
            files add:fn.
1264
650132956801 allow '*' and '*.' in path
tm
parents: 1258
diff changeset
   220
        ].
650132956801 allow '*' and '*.' in path
tm
parents: 1258
diff changeset
   221
    ].
650132956801 allow '*' and '*.' in path
tm
parents: 1258
diff changeset
   222
2474
38de996b9ee0 SSH-SFTP support
Stefan Vogel <sv@exept.de>
parents: 1519
diff changeset
   223
    oneArgFilterBlock notNil ifTrue:[
38de996b9ee0 SSH-SFTP support
Stefan Vogel <sv@exept.de>
parents: 1519
diff changeset
   224
        files := files select:oneArgFilterBlock
38de996b9ee0 SSH-SFTP support
Stefan Vogel <sv@exept.de>
parents: 1519
diff changeset
   225
    ].
38de996b9ee0 SSH-SFTP support
Stefan Vogel <sv@exept.de>
parents: 1519
diff changeset
   226
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   227
    files do:[:eachFilename| |baseName stream|
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   228
        [
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   229
            baseName := eachFilename baseName.
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   230
            attributes at:#fileSize put:eachFilename fileSize.
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   231
            attributes at:#baseName put:baseName.  
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   232
            (self pathSegments includes:baseName) ifTrue:[
1258
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   233
                attributes at:#uriInfo put:self.  
1266
4522fd38deef *** empty log message ***
tm
parents: 1264
diff changeset
   234
            ] ifFalse:[ |uri col|
4522fd38deef *** empty log message ***
tm
parents: 1264
diff changeset
   235
                uri := self copy.
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   236
                col := self pathSegments copy.
1266
4522fd38deef *** empty log message ***
tm
parents: 1264
diff changeset
   237
                col removeLast.
4522fd38deef *** empty log message ***
tm
parents: 1264
diff changeset
   238
                col add:baseName.
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   239
                uri pathSegments:col.
1266
4522fd38deef *** empty log message ***
tm
parents: 1264
diff changeset
   240
                attributes at:#uriInfo put:uri.  
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   241
            ].
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   242
            stream := eachFilename readStream.
3453
a49af911b6e0 class: FileURI
Stefan Vogel <sv@exept.de>
parents: 2871
diff changeset
   243
            aBlock value:stream optionalArgument:attributes.
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   244
        ] ensure:[
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   245
            stream notNil ifTrue:[stream close]
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   246
        ].
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   247
2484
6f252eb387f6 Fixes for SFTP/Solaris and '~' paths
Stefan Vogel <sv@exept.de>
parents: 2474
diff changeset
   248
        renameBlock notNil ifTrue:[
6f252eb387f6 Fixes for SFTP/Solaris and '~' paths
Stefan Vogel <sv@exept.de>
parents: 2474
diff changeset
   249
            |renameFilenameString|
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   250
            renameFilenameString := renameBlock value:eachFilename pathName.
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   251
            renameFilenameString asFilename exists ifTrue:[
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   252
                renameFilenameString := renameFilenameString, '.', 
1436
e680f637d998 Use Timestamp/#asTimestamp instead of AbsoluteTime/#asAbsoluteTime
Stefan Vogel <sv@exept.de>
parents: 1374
diff changeset
   253
                        (Timestamp now printStringFormat:'%(year)%(mon)%(day)%h%m%s').
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   254
            ].
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   255
            eachFilename moveTo:renameFilenameString.
1258
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   256
        ].
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   257
    ].
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   258
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   259
    "
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   260
        (URI fromString:'file:~/test/out') 
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   261
            readStreamsDo:[:stream :attributes | 
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   262
                Transcript showCR:(attributes at:#baseName).
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   263
                Transcript showCR:(attributes at:#fileSize).
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   264
                Transcript showCR:(attributes at:#requestDirectory).
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   265
                Transcript showCR:(attributes at:#uriInfo).
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   266
            ].
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   267
        (URI fromString:'file:~/test/out/*1') 
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   268
            readStreamsDo:[:stream :attributes | 
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   269
                Transcript showCR:(attributes at:#baseName).
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   270
                Transcript showCR:(attributes at:#fileSize).
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   271
                Transcript showCR:(attributes at:#requestDirectory).
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   272
                Transcript showCR:(attributes at:#uriInfo).
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   273
            ].
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   274
    "
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   275
!
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   276
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   277
writeStreamDo:aBlock
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   278
    "evaluate a block with the write stream as first argument
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   279
     and a dictionary containing attributes as second argument.
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   280
     The stream is closed after aBlock has been evaluated.
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   281
     Attributes may be the mime type (key #MIME)"
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   282
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   283
    |stream|
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   284
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   285
    ^ [
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   286
        stream := self asFilename writeStream.
3453
a49af911b6e0 class: FileURI
Stefan Vogel <sv@exept.de>
parents: 2871
diff changeset
   287
        aBlock value:stream optionalArgument:self class attributes
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   288
     ] ensure:[
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   289
        stream notNil ifTrue:[stream close]
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   290
     ].
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   291
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   292
    "
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   293
        (URI fromString:'file:/home/tm/tmp') 
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   294
            readStreamsDo:[:stream :attributes| 
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   295
                Transcript showCR:(attributes at:#MIME).
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   296
                Transcript showCR:(stream isWritable).
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   297
            ].
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   298
    "
1258
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   299
!
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   300
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   301
writeStreamDo:aBlock create:doCreate
1268
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   302
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   303
    ^ self writeStreamDo:aBlock create:doCreate atomic:false.
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   304
!
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   305
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   306
writeStreamDo:aBlock create:doCreate atomic:doAtomic
1258
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   307
    "evaluate a block with the write stream as first argument
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   308
     and a dictionary containing attributes as second argument.
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   309
     The stream is closed after aBlock has been evaluated.
1268
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   310
     Attributes may be the mime type (key #MIME)
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   311
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   312
     If doCreate is true, a nonExistent directory will be created.
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   313
     If doAtomic is true, files will appear atomically, by using
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   314
        an intermediate file theat will be renamed"
1258
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   315
1268
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   316
    |stream fileName toFileName|
1258
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   317
1268
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   318
    fileName := self asFilename.
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   319
    toFileName := fileName.
1268
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   320
    doAtomic ifTrue:[
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   321
        fileName isDirectory ifFalse:[
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   322
            toFileName := fileName directory.
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   323
        ].
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   324
        toFileName := toFileName construct:'.transferFile'.
1268
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   325
    ].
1258
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   326
    [
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   327
        Stream streamErrorSignal handle:[:ex|
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   328
            doCreate ifFalse:[
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   329
                ex reject
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   330
            ].    
1268
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   331
            fileName directory recursiveMakeDirectory.
1284
57550436b55b file exists error handling
tm
parents: 1271
diff changeset
   332
            self exists ifTrue:[ |infoStream|
57550436b55b file exists error handling
tm
parents: 1271
diff changeset
   333
                infoStream := '' writeStream.
57550436b55b file exists error handling
tm
parents: 1271
diff changeset
   334
                self publicPrintOn:infoStream.
57550436b55b file exists error handling
tm
parents: 1271
diff changeset
   335
                self error:('Local write: Datei %1 already exists!!' bindWith:infoStream contents).
57550436b55b file exists error handling
tm
parents: 1271
diff changeset
   336
            ].
1268
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   337
            stream := toFileName writeStream.
1258
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   338
        ] do:[
1284
57550436b55b file exists error handling
tm
parents: 1271
diff changeset
   339
            self exists ifTrue:[ |infoStream|
57550436b55b file exists error handling
tm
parents: 1271
diff changeset
   340
                infoStream := '' writeStream.
57550436b55b file exists error handling
tm
parents: 1271
diff changeset
   341
                self publicPrintOn:infoStream.
57550436b55b file exists error handling
tm
parents: 1271
diff changeset
   342
                self error:('Local write: Datei %1 already exists!!' bindWith:infoStream contents).
57550436b55b file exists error handling
tm
parents: 1271
diff changeset
   343
            ].
1268
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   344
            stream := toFileName writeStream.
1258
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   345
        ].
3453
a49af911b6e0 class: FileURI
Stefan Vogel <sv@exept.de>
parents: 2871
diff changeset
   346
        aBlock value:stream optionalArgument:self class attributes.
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   347
        stream close.
1268
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   348
        doAtomic ifTrue:[
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   349
            toFileName moveTo:fileName.
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   350
        ]
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   351
    ] ifCurtailed:[
1258
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   352
        stream notNil ifTrue:[stream close]
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   353
    ].
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   354
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   355
    "
2474
38de996b9ee0 SSH-SFTP support
Stefan Vogel <sv@exept.de>
parents: 1519
diff changeset
   356
        (URI fromString:'file:/~') 
38de996b9ee0 SSH-SFTP support
Stefan Vogel <sv@exept.de>
parents: 1519
diff changeset
   357
            readStreamsDo:[:stream :attributes|
38de996b9ee0 SSH-SFTP support
Stefan Vogel <sv@exept.de>
parents: 1519
diff changeset
   358
                stream notNil ifTrue:[
38de996b9ee0 SSH-SFTP support
Stefan Vogel <sv@exept.de>
parents: 1519
diff changeset
   359
                    Transcript show(attributes at:#MIME); tab; showCR:(stream isWritable).
38de996b9ee0 SSH-SFTP support
Stefan Vogel <sv@exept.de>
parents: 1519
diff changeset
   360
                ].
1258
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   361
            ].
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   362
    "
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   363
! !
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   364
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   365
!FileURI class methodsFor:'documentation'!
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   366
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   367
version
4182
4c84b6a60de4 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 3453
diff changeset
   368
    ^ '$Header$'
2474
38de996b9ee0 SSH-SFTP support
Stefan Vogel <sv@exept.de>
parents: 1519
diff changeset
   369
!
38de996b9ee0 SSH-SFTP support
Stefan Vogel <sv@exept.de>
parents: 1519
diff changeset
   370
38de996b9ee0 SSH-SFTP support
Stefan Vogel <sv@exept.de>
parents: 1519
diff changeset
   371
version_CVS
4182
4c84b6a60de4 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 3453
diff changeset
   372
    ^ '$Header$'
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   373
! !
2871
af6745fe3136 class: HttpURI
Claus Gittinger <cg@exept.de>
parents: 2484
diff changeset
   374