Avatar billede sorenstrom Nybegynder
30. juni 2003 - 09:58 Der er 7 kommentarer og
1 løsning

Problemer med drev

Jeg har et program, hvor jeg laver backup til en ekstern USB-disk.
Nogle gange får jeg startet backup'en før Windows har registreret at jeg har tilsluttet disken.

Nu vil jeg gerne lave en lille løkke, der gennemløber alle drev, og leder efter en bestemt fil, jeg har liggende på min USB-disk. Jeg har prøvet følgende:

Alfabet = "cdefghijklmnopqrstuwxyz"
AlfaLen = Len(Alfabet)
d = 1
For d = d To AlfaLen
    Disk = Mid(Alfabet, d, 1)
    If Len(Dir(Disk & ":\counts.ini")) > 1 Then
      BackupPath = Disk & ":\"
      BackupFejl = "Backup er taget på " & UCase(Disk) & "-drevet"
      DiskBesked = "Der tages backup på " & UCase(Disk) & "-drevet"
    End If

Mit problem er, at når jeg skal checke CD-ROM-drevet, og der ikke sidder en CD i drevet, så får jeg en fejl.

Runtime error 52
Bad filename or number.

Kan jeg omgå det på nogen måde?

/Søren
Avatar billede joern Nybegynder
30. juni 2003 - 11:19 #1
Hej Søren.

Du må tilføje en error handling, der afværger at dit program går i stå og i stedet meddeler brugeren årsagen til fejlen og hvad det så skal gøres.

Inden jeg kaster mig ud i kodeskrivning, så fortæl om du kender til errorhandling i VB og om du har læst i on-linehjælpen om 'on error goto'

M.v.h.  Jørn
Avatar billede Nybegynder
30. juni 2003 - 11:48 #2
Du skal lave er error som denne her : on errror resume next. Den linje putter du bare i topen af din sub/function.
Hilsen Lars
Avatar billede sorenstrom Nybegynder
30. juni 2003 - 13:06 #3
>> lcl-lars
Jeg har forsøgt med On Error Resume Next.
Problemet er så, at min løkke altid vælger D-drevet, som er det første bogstav i rækken.

>> Jørn
Jeg kender godt On Error Goto, men jeg kan ikke "hitte ud af" hvad jeg skal gøre når jeg får fejlkode 52
/Søren
Avatar billede sorenstrom Nybegynder
30. juni 2003 - 13:06 #4
Kan man ikke finde ud af. hvilken type drev, der er tale om?
/Søren
Avatar billede joern Nybegynder
30. juni 2003 - 13:54 #5
Hej Søren.

I en applikation har jeg følgende vedr. diskettedrevet:

Private Sub knjurtil_Click()
  On Error GoTo ingendisk3
  FileCopy doksti & Right(lstkunde.Text, 8) & "." & ext, "a:\" & Right(lstkunde.Text, 8) & "." & ext
  knjurtil.Enabled = False
  Exit Sub
ingendisk3:
X = MsgBox("Der er ingen diskette i drev a: eller disken er fuld.", 48, "Medd. fra 'kopier til diskette.")
  Exit Sub
  Resume Next
End Sub

Læg mærke til at der er et par lange linier - de skal selvfølgelig være ud i ét.

Programmet går ikke i stå når disketten mangler, men venter på ny 'ordre', - f.eks. at der indsættes en diskette.  Så må brugeren trykke på kanppen igen.

Du kan også lave en 'select case' - der giver forskellige muligheder efter hvilket nr. fejlkoden har.

Select Case Error(nr)  se:  'Trappable Errors' i hjælpen

M.v.h.  Jørn
Avatar billede sjh Nybegynder
30. juni 2003 - 15:54 #6
Prøv lige og smid den her kode ind på en ny form1 og se :-)


'----------------------- Form1 -----------------------
Option Explicit

Private Const INVALID_HANDLE_VALUE = -1
Private Const MAX_PATH = 260

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 strPath As String) As Boolean
Dim WFD As WIN32_FIND_DATA
Dim hFile As Long
  hFile = FindFirstFile(strPath, WFD)
  FileExists = hFile <> INVALID_HANDLE_VALUE
  Call FindClose(hFile)
End Function

Public Function BackupExists(ByVal strFile As String) As String
Dim i As Integer
Dim strDrive As String
  BackupExists = "Kan ikke finde nogle backup."
  For i = 67 To 90 'Loop fra A=65 til Z=90 (C=67)
    strDrive = Chr$(i) & ":\" '(C til Z:\)
    If FileExists(strDrive & strFile) Then
      BackupExists = "Backup file på " & strDrive
      Exit For
    End If
  Next i
End Function

Private Sub Form_Load()
  'her skriver du den file som du søger efter (counts.ini)
  Me.Caption = BackupExists("counts.ini")
End Sub
'----------------------- Form1 -----------------------
Avatar billede sorenstrom Nybegynder
30. juni 2003 - 20:34 #7
>> Tak for det sjh
Det var lige netop løsningen
/Søren
Avatar billede sjh Nybegynder
30. juni 2003 - 21:28 #8
selv tak
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

Seneste spørgsmål Seneste aktivitet
I går 10:21 Ny printer, men hvilken Af mort1 i Printere
13/0819:41 USB på Linux Af Uvanga i Linux
12/0818:26 Hvilken type mus Af mort1 i PC
11/0813:21 ms Forms Af leahcim i Andet software
10/0821:30 Blokeret på Snapchat? Af LineP i Chat & Messaging