Avatar billede sorenstrom Nybegynder
14. april 2003 - 23:40 Der er 11 kommentarer og
1 løsning

Kan jeg kende forskel på mapper og filer?

Jeg arbejder på et lille backup-program.

Jeg har læst alt, der skal "backes" op ind i en listboks som f.eks.

C:\ADIMPORT\ADSCAN\ADSCAN.EXE
C:\ADIMPORT\ADSCAN\ADSCAN.ORG

Hvordan kan jeg kende forskel på om en sti som ovenstående slutter med et mappenavn eller et filnavn

/Søren
Avatar billede sjh Nybegynder
14. april 2003 - 23:56 #1
Private Sub Form_Load()
Dim strPath1  As String
Dim strPath2  As String

strPath1 = "C:\ADIMPORT\ADSCAN\ADSCAN.EXE"
strPath2 = "C:\ADIMPORT\ADSCAN\ADSCAN.ORG"

  If LCase$(strPath1) = LCase$(strPath2) Then
    MsgBox "De er ens."
      Else
    MsgBox "De er ikke ens."
  End If
End Sub
Avatar billede sorenstrom Nybegynder
15. april 2003 - 00:01 #2
>> sjh
Kan du forklare det lidt nærmere

/Søren
Avatar billede sjh Nybegynder
15. april 2003 - 00:03 #3
Hvad er det du ikke forstår?
Avatar billede sorenstrom Nybegynder
15. april 2003 - 00:07 #4
Som jeg ser det laver du bare strengen om til små bogstaver.
Måske er min forklaring ikke tydelig nok.

Hvis jeg har en sti, der hedder:
  "c:\adimport\adscan\adscan.org"
Hvordan kan jeg så checke om "adscan.org" er en fil eller en mappe?
Avatar billede sjh Nybegynder
15. april 2003 - 00:34 #5
'----------------------------------- Form1 -----------------------------------
Option Explicit

Private Sub Form_Load()
Dim strPath  As String
  strPath = "c:\autoexec.bat"
 
  If FolderExists(strPath) = False And FileExists(strPath) = True Then
    MsgBox "Det er en file."
  ElseIf FolderExists(strPath) = True Or FileExists(strPath) = True Then
    MsgBox "Det er et bibliotek."
  ElseIf FolderExists(strPath) = False And FileExists(strPath) = False Then
    MsgBox "Stigen er ikke korrekt."
  End If
End Sub
'----------------------------------- Form1 -----------------------------------

'---------------------------------- Module1 ----------------------------------
Option Explicit

Private Const MAX_PATH As Long = 260
Private Const INVALID_HANDLE_VALUE As Long = -1
Private Const FILE_ATTRIBUTE_DIRECTORY As Long = &H10

Private Type FILETIME
        dwLowDateTime As Long
        dwHighDateTime As Long
End Type

Private Type WIN32_FIND_DATA
        dwFileAttributes As Long
        ftCreationTime As FILETIME
        ftLastAccessTime As FILETIME
        ftLastWriteTime As FILETIME
        nFileSizeHigh As Long
        nFileSizeLow As Long
        dwReserved0 As Long
        dwReserved1 As Long
        cFileName As String * MAX_PATH
        cAlternate As String * 14
End Type

Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long

Public Function FileExists(ByVal strFiles As String) As Boolean
Dim WFD As WIN32_FIND_DATA
Dim hFile As Long
  hFile = FindFirstFile(strFiles, WFD)
  FileExists = CBool(hFile <> INVALID_HANDLE_VALUE)
  Call FindClose(hFile)
End Function

Public Function FolderExists(ByVal strFolder As String) As Boolean
Dim hFile As Long
Dim WFD As WIN32_FIND_DATA
  strFolder = QualifyPath(strFolder)
  hFile = FindFirstFile(strFolder, WFD)
  FolderExists = CBool((hFile <> INVALID_HANDLE_VALUE) And _
                (WFD.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY))
  Call FindClose(hFile)
End Function

Private Function QualifyPath(ByVal strFolder As String) As String
  strFolder = Trim$(strFolder)
  If Right$(strFolder, 1) = "\" Then
        QualifyPath = Left$(strFolder, Len(strFolder) - 1)
  Else: QualifyPath = strFolder
  End If
End Function
'---------------------------------- Module1 ----------------------------------
Avatar billede sorenstrom Nybegynder
15. april 2003 - 00:37 #6
OKAY sjh
Det var en ordentlig smøre.
Den bliver jeg nok nødt til at sove på. :-)
Go'nat

/Søren
Avatar billede sjh Nybegynder
15. april 2003 - 00:38 #7
ha ha..
Avatar billede martin_moth Mester
15. april 2003 - 10:20 #8
Du kan også bruge FileSystemObject i stedet for et API-kald - så kan du gøre det på 5-10 linier :o)
Avatar billede sorenstrom Nybegynder
16. april 2003 - 08:36 #9
>> martin moth
Kunne du så ikke tænke dig, at skrive hvordan det gøres :-)
/Søren
Avatar billede sjh Nybegynder
16. april 2003 - 08:50 #10
du kan få den af mig ;-)

Option Explicit

Private Sub Form_Load()
Dim strPath  As String
Dim fso As Object
  strPath = "c:\autoexec.bat"

  Set fso = CreateObject("Scripting.FileSystemObject")

    With fso
      If .FolderExists(strPath) = False And .FileExists(strPath) = True Then
        MsgBox "Det er en file."
      ElseIf .FolderExists(strPath) = True Or .FileExists(strPath) = True Then
        MsgBox "Det er et bibliotek."
      ElseIf .FolderExists(strPath) = False And .FileExists(strPath) = False Then
        MsgBox "Stigen er ikke korrekt."
      End If
    End With

  Set fso = Nothing
End Sub
Avatar billede sjh Nybegynder
16. april 2003 - 09:11 #11
Men jeg vil nok fortrække det som API-Kald, det er hurtigere i forhold til FileSystemObject.

Med et API-Kald springer du en eller flere funktioner over.
Avatar billede sjh Nybegynder
16. april 2003 - 09:30 #12
Du kan prøve en lille speed test. API-Kald mod Selve VB :-)

http://hjem.get2net.dk/sjh/eksperten/CopyMemory.zip
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester