Newsgroup: it.comp.lang.visual-basic
Titolo: FlushFileBuffers ??

Salve a tutti!
Sto realizzando un programmino che mi consente di copiare attraverso il
click sul commandbutton di una mia form,la copia di una cartella di windows
e subdirectories incluse sul mio CDROM.
Sulla mia form ho piazzato un controllo progressbar in modo tale da vedere
quando la copia termina.
Poichè pero' quando copio dal mio hard disk al mio CDROM i dati vanno a
finire prima nel BUFFER del mio CDROM,
La barra di progressione avanza velocemente e si completa non appena il
BUFFER del CDROM si riempie e cosi' io non riesco a vedere effettivamente
quando la copia si è completata.
Ho visto nel newsgroup corrente che forse posso usare la funzione :
FlushFileBuffers
ma non so come dichiararla e come inserirla nel codice del mio programma.
Qualcuno di voi sarebbe cosi' gentile da mostrarmi il codice per dichiararla
e magari un esempio di come posso sincronizzarla con la mia progressbar??
Nel mio programma per copiare la cartella e files inclusi, ho usato le
funzioni API FINDFIRSTFILE,FINDNEXTFILE,FINDCLOSEFILE
le ho inglobate in questa funzione:
Public Function rgbCopyFiles(sSourcePath As String, _
                             sDestination As String, _
                             sFiles As String) As Long
   Dim WFD As WIN32_FIND_DATA
   Dim SA As SECURITY_ATTRIBUTES
   Dim r As Long
   Dim hFile As Long
   Dim bNext As Long
   Dim copied As Long
   Dim currFile As String
   If Right$(sDestination, 1) <> "\" Then
   sDestination = sDestination & "\"
   Else:
   End If
  'Create the target directory if it doesn't exist
   Call CreateDirectory(sDestination, SA)
  'Start searching for files in the Target directory.
   hFile = FindFirstFile(sSourcePath & sFiles, WFD)
   If (hFile = INVALID_HANDLE_VALUE) Then
      'nothing to do, so bail out
       MsgBox "No " & sFiles & " files found."
       Exit Function
   End If
  'Copy each file to the new directory
   If hFile Then
      Do
        'trim trailing nulls, leaving one to terminate the string
         currFile = Left$(WFD.cFileName, InStr(WFD.cFileName, Chr$(0)))
        'copy the file to the destination directory & increment the count
         Call CopyFile(sSourcePath & currFile, sDestination & currFile,
False)
         copied = copied + 1
        'just to check what's happening
        Progressbar1.value = progressbar1.value + 1
         List1.AddItem sSourcePath & currFile
        'find the next file matching the initial file spec
         bNext = FindNextFile(hFile, WFD)
      Loop Until bNext = 0
   End If
  'Close the search handle
   Call FindClose(hFile)
  'and return the number of files copied
   rgbCopyFiles = copied
End Function
'--end block--
per copiare i files contenuti nella cartella principale mentre per copiare
le cartelle Subdirectories ho integrato la funzione
Filesystemobject.copyfolder inclusa in questa routine che richiama a sua
volta la funzione per copiare i files.
Private Sub Command1_Click()
   Dim sSourcePath As String
   Dim sDestination As String
   Dim sFiles As String
   Dim numCopied As Long
   Dim Fs As Object
   Set Fs = CreateObject("Scripting.FileSystemObject")
  'set the appropriate initializing values
   sSourcePath = "d:\tm\"
   sDestination = Text1.Text
   sFiles = "*.*"
   'If sDestination = Text1.Text Then MkDir sDestination
  'perform the copy and return the copied file count
   numCopied = rgbCopyFiles(sSourcePath, sDestination, sFiles)
   MsgBox numCopied & " files copied to " & sDestination
Fs.CopyFolder "d:\tm\*", sDestination
End Sub
Avendo un controllo progressbar come lo inserisco nel codice??
Tenete presente che la proprietà MAX del controllo progressbar deve essere
ugulae al numero fi files e/o directories inclusi nella cartella sorgente
per cui ho usato una routine simile a quella di cui sopra"Rgbcopyfiles" che
mi conta il numero totlae dei files e dopo faccio eseguire la funzione
Rgbcopyfiles".
AIUTOOOOOOO!!!!!!!!

ma non so come dichiararla e come inserirla nel codice del mio programma.
HOWTO: Write Data to a File Using WriteFile API 
Q165942
-- 
hth, hal

Q165942
http://support.microsoft.com/support/kb/articles/Q165/9/42.asp
-- 
hth, hal

ma come fai a scrivere sul cdrom?
utilizzi un programma poarticolare tipo directcd o altri o altri metodi?
Se utilizzi i programmi probabilmente è normale che tu non riesca per il
fatto che gli stessi hanno un buffer a loro volta (a volte anche
personalizzabile). Ed è windows che utilizza funzioni differenti per
stabilire il tempo rimasto.
ciao
L2K

 ha scritto nel messaggio
news:CACZ7.1809$WQ2....@news2.tin.it...
