Announcement

Collapse
No announcement yet.

OPEN with non-existant File Path

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Lance Edmonds
    replied
    Hmmm... you can trim that SUB down a tad by removing the unnecessary string conversion, and passing the address of the dynamic string data directly to the API. Internally, all dynamic strings have a trailing CHR$(0), so adding one just wastes a wee bit of time. Also, since you are not returning the error/success code, you can CALL the API instead. Finally, just ensure you don't pass an empty string to the SUB.
    Code:
    Sub CheckDir(TestDir As String)
      CALL MakeSureDir(BYVAL STRPTR(TestDir))
    End Sub
    ------------------
    Lance
    PowerBASIC Support
    mailto:[email protected][email protected]</A>

    Leave a comment:


  • Joseph W Murphy
    replied
    Little known api call will create directory structure
    IMAGEHLP.DLL is part of IE 4.0 or Win98 and later, so most PC's should have it

    Code:
    Declare Function MakeSureDir LIB "IMAGEHLP.DLL" Alias "MakeSureDirectoryPathExists" (lpDirName As Asciiz) As Long
    
    Sub CheckDir(TestDir As String)
        Dim RetVal As Long
        Dim DirPath As Asciiz * MAX_PATH
        ' The ending backslash is necessary
        DirPath = TestDir & Chr$(0)
        RetVal = MakeSureDir(DirPath)
    End Sub
    Hope this helps
    Joe Murphy

    ------------------

    Leave a comment:


  • Lance Edmonds
    replied
    Mel, you cannot call Real-mode interrupts from a Protected mode application (ie, a 32-bit Windows EXE or DLL).

    In other words: calling a DOS interrupt from a Windows program earns you one GPF point for trying!



    ------------------
    Lance
    PowerBASIC Support
    mailto:[email protected][email protected]</A>

    Leave a comment:


  • Mel Bishop
    replied
    As I understad it, PB/Win does not support call interrupts as
    PB/DOS does. However, the following snippit should be
    translatable into ASM statements/functions and should work.
    When called, if the sub-directory exists, AX = 0. If it doesn't
    exist, AX = 3. This allows for testing the complete
    sub-directory (without file names) existance without crashing
    the program.

    SubDir$ = SubDir$ + chr$(0)
    reg 1, &h3b00
    reg 4, strptr(subdir$)
    reg 8, strseg(subdir$)
    call interrupt &h21
    SubExists = reg(1)

    Lance, if I'm completely out in left field, please feel free
    to delete this post.


    ------------------

    Leave a comment:


  • James Moneypenny
    replied
    Doug,
    The following code is what I use to build nested directories.
    The subroutine ignores errors. It is the programmers responsibility to verify creation of the directory.

    This will build complete directories using standard paths and UNC paths.

    Code:
    SUB BuildDir (BYVAL Path$) 
       drive$=""
       
       'Strip off trailing backslash
       IF RIGHT$(Path$,1)="\" THEN
          Path$=MID$(Path$,1,LEN(Path$)-1)
       END IF
    
       'Check for UNC Path and make drive$ = to machine name
       IF MID$(Path$,1,2)="\\" THEN
          temp_pos&=instr(3,Path$,"\")
          drive$=mid$(Path$,1,temp_pos&-1)
          Path$=MID$(Path$,len(drive$)+2)
          root&=1
       ELSE
          IF MID$(Path$,1,1)="\" THEN
             Path$=MID$(Path$,2)
             root&=1
          END IF
       END IF
    
       IF MID$(Path$,2,1)=":" THEN
          drive$=MID$(Path$,1,2)
          Path$=MID$(Path$,3)
          IF MID$(Path$,1,1)="\" THEN
             Path$=MID$(Path$,2)
             root&=1
          END IF
       END IF
    
       'Loop through path building directories as needed....
       FOR i&=1 TO LEN(Path$)
          c$=MID$(Path$,i&,1)
          IF c$="\" THEN
             ON ERROR RESUME NEXT
                IF root& THEN
                   MKDIR drive$+"\"+a$
                ELSE
                   MKDIR a$
                END IF
             ON ERROR GOTO 0
          END IF
          a$=a$+c$
       NEXT i&
       ON ERROR RESUME NEXT
          IF root& THEN
             MKDIR drive$+"\"+a$
          ELSE
             MKDIR a$
          END IF
       ON ERROR GOTO 0
    END SUB
    ------------------
    James Moneypenny

    Leave a comment:


  • Doug Gamble
    replied
    Thanks Tom...Thank explains the problem. I'll check the forum
    again but didn't see anything like that on my first look before
    posting the message. If I get something working I'll post it.

    ------------------
    Thanks,

    Doug Gamble
    mailto:[email protected][email protected]</A>

    Leave a comment:


  • Tom Hanlin
    replied
    MKDIR can only create a single directory at a time. If the path involves
    nested directories, you need to account for this by creating the top directory
    first, then the next, and so forth. There's probably code to do this here
    already. Try a Forum search.

    ------------------
    Tom Hanlin
    PowerBASIC Staff

    Leave a comment:


  • Doug Gamble
    started a topic OPEN with non-existant File Path

    OPEN with non-existant File Path

    I'm trying to use the OPEN keyword in PBDLL 6.0 with a File Name that
    included a path that does not exist. I keep getting an error 76 on
    the OPEN statment. So I added code to us MKDIR to create the path if
    if didn't exist but it also returns an error 76. I'm using Windows
    2000 Professional and the path does use long file names. Any ideas?

    ------------------
    Thanks,

    Doug Gamble
    mailto:[email protected][email protected]</A>
Working...
X