MartyConnelly
martyconnelly at shaw.ca
Thu Aug 18 14:46:29 CDT 2005
I have done something similar for records management but I create the
directory name structures from a table
easier to maintain.. One funny is trying to delete the upper root
directory if created by the program
it may require a reboot to lose NFTS file handle of the root..
You may need this routine to check for illegal DOS filename characters
And perhaps change spaces to underscores.
If your directory filename string greater than 256, there is trouble
burning to Joliet CD-ROM format.
Function NameFix(NameIn As String) As String
Const ILLEGAL_CHARACTERS = "/\:*?<>|"""
' = /\:*?<>|"
Dim i As Integer
Dim iTmp As Integer
'replaces illegal DOS filename character with an underscore
NameFix = NameIn
For i = 1 To Len(ILLEGAL_CHARACTERS)
iTmp = InStr(1, NameFix, Mid$(ILLEGAL_CHARACTERS, i, 1))
If iTmp > 0 Then
Mid$(NameFix, iTmp, 1) = "_"
End If
Next
'non ascii printing characters
' Just realized this code will also replace spaces with
'underscores.
'to accept spaces, change
'> If iTmp < 33 Or iTmp > 126 Then to
'> If iTmp < 32 Or iTmp > 126 Then
For i = 1 To Len(NameFix)
iTmp = Asc(Mid$(NameFix, i, 1))
If iTmp < 32 Or iTmp > 126 Then
Mid$(NameFix, i, 1) = "_"
End If
Next
End Function
'============
This routine creates the directories and upper path structure if
non-existant
'**************************************
' Name: CreateDirectoryStruct
' Description:Creates all non-existing folders in a path.
' Local or network UNC path.
'
' Inputs:CreateThisPath as string
'
'CreateDirectoryStruct("c:\temp\c\b\a")
Sub CreateDirectoryStruct(CreateThisPath As String)
'do initial check
Dim ret As Boolean, temp$, ComputerName As String, IntoItCount As
Integer, X%, _
WakeString As String
Dim MadeIt As Integer
If Dir$(CreateThisPath, vbDirectory) <> "" Then Exit Sub
'is this a network path?
If Left$(CreateThisPath, 2) = "\\" Then ' this is a UNC NetworkPath
'must extract the machine name first, th
' en get to the first folder
IntoItCount = 3
ComputerName = Mid$(CreateThisPath, IntoItCount,
InStr(IntoItCount, _
CreateThisPath, "\") - IntoItCount)
IntoItCount = IntoItCount + Len(ComputerName) + 1
IntoItCount = InStr(IntoItCount, CreateThisPath, "\") + 1
'temp = Mid$(CreateThisPath, IntoItCount
' , x)
Else ' this is a regular path
IntoItCount = 4
End If
WakeString = Left$(CreateThisPath, IntoItCount - 1)
'start a loop through the CreateThisPath
' string
Do
X = InStr(IntoItCount, CreateThisPath, "\")
If X <> 0 Then
X = X - IntoItCount
temp = Mid$(CreateThisPath, IntoItCount, X)
Else
temp = Mid$(CreateThisPath, IntoItCount)
End If
IntoItCount = IntoItCount + Len(temp) + 1
temp = WakeString + temp
'Create a directory if it doesn't alread
' y exist
ret = (Dir$(temp, vbDirectory) <> "")
If Not ret Then
'ret& = CreateDirectory(temp, Security)
MkDir temp
End If
IntoItCount = IntoItCount 'track where we are in the String
WakeString = Left$(CreateThisPath, IntoItCount - 1)
Loop While WakeString <> CreateThisPath
End Sub
Arthur Fuller wrote:
>The current client has distinct preferences about how files ought to be
>stored.
>
>A client has 1:M projects.
>A project has 1:M assessments.
>An assessment concerns exactly one workstation.
>The resulting document must come out reflecting all workstations involved in
>said project for said client (this part is trivial).
>
>The client app's native directory is c:\MyClient. The subdir for said
>reports is c:\MyClient\reports.
>
>The client wants me to create a dir for each project and then plant the
>related documents in said project-subdir.
>
>This says to me that the Client table contains a directory name, and that
>the ClientProjects table also contains a directory name, and that given
>project 12356 I concatenate the above two values, plus the unique
>identifier, and create a file called "c:\MyClient\HerClient\Reports\" &
>Unique_ID & ".doc" (the resultant docs are all Word files).
>
>1. I have so far created the said doc from a template: no problems there.
>But I would like also to supply the concatenated filename so that a simple
>click on the Save button causes the file to be saved. (I should mention that
>the docs spit out by the Access app _always_ require editing; else we would
>simply dump an Access report.)
>
>Given that the client is CharlotteFoust and that her docs get sent to
>c:\MyClient\HerClient\CharlotteFoust, then I want Word to realize that the
>created document should be called "c:\MyClient\HerClient\CharlotteFoust\" &
>Unique_ID & ".doc" -- and placed in subdir (create if required) Project
>20050818.
>
>I don't want the user to have to name the file. I want that to have already
>been done, so she can click Save after her edits and that's that.
>
>Had I been granted the discretion to design this particular model, I would
>not have chosen this path. That however is not the issue. The issue is that
>the client and her employees want to do it this way.
>
>Advice, guidance, assaults on the model, all gratefully accepted.
>
>
>
>
--
Marty Connelly
Victoria, B.C.
Canada