PDA

View Full Version : [VB] Un paio di domande semplici...


robnet77
21-11-2003, 16:41
Mi servirebbe di sapere alcune cose:

1) Come faccio a cambiare la directory predefinita di lavoro dove VB va a cercare i files? Non vorrei dover specificare ogni volta il percorso manualmente... avevo provato con ChDir ma non sono riuscito... eventualmente, mi servirebbe anche di sapere come fare a creare un file di output sulla cartella dove è installato il programma VB...

2) Come posso recuperare le informazioni sugli attributi di un file? Intendo data di modifica, flag di archivio, etc. perché dovrei fare un programma di backup incrementale...

3) Come faccio a rendere sicura la copia di un file anche di grandi dimensioni? La procedura filecopy è troppo aleatoria per fidarsi di essa...


Grazie :)

matpez
21-11-2003, 17:58
1) Come faccio a cambiare la directory predefinita di lavoro dove VB va a cercare i files? Non vorrei dover specificare ogni volta il percorso manualmente... avevo provato con ChDir ma non sono riuscito... eventualmente, mi servirebbe anche di sapere come fare a creare un file di output sulla cartella dove è installato il programma VB...


Non ho ben capito cosa ti serva in questo punto!

2) Come posso recuperare le informazioni sugli attributi di un file? Intendo data di modifica, flag di archivio, etc. perché dovrei fare un programma di backup incrementale...

La funzione GetAttr fa al caso tuo :)

3) Come faccio a rendere sicura la copia di un file anche di grandi dimensioni? La procedura filecopy è troppo aleatoria per fidarsi di essa...

Prova questo (funziona anche su NTFS):

'in a form (Form1)
Private Sub Form_Load()
'KPD-Team 2001
'URL: http://www.allapi.net/
'E-Mail: [email protected]
Dim Ret As Long
'set the graphics mode to persistent
Me.AutoRedraw = True
'print some text
Me.Print "Click the form to abort the filecopy"
'show the form
Me.Show
'start copying
Ret = CopyFileEx("c:\verybigfile.ext", "c:\copy.ext", AddressOf CopyProgressRoutine, ByVal 0&, bCancel, COPY_FILE_RESTARTABLE)
'show some text
Me.Print "Filecopy completed " + IIf(Ret = 0, "(ERROR/ABORTED)", "successfully")
End Sub
Private Sub Form_Click()
'cancel filecopy
bCancel = 1
End Sub
'in a module
Public Const PROGRESS_CANCEL = 1
Public Const PROGRESS_CONTINUE = 0
Public Const PROGRESS_QUIET = 3
Public Const PROGRESS_STOP = 2
Public Const COPY_FILE_FAIL_IF_EXISTS = &H1
Public Const COPY_FILE_RESTARTABLE = &H2
Public Declare Function CopyFileEx Lib "kernel32.dll" Alias "CopyFileExA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal lpProgressRoutine As Long, lpData As Any, ByRef pbCancel As Long, ByVal dwCopyFlags As Long) As Long
Public bCancel As Long
Public Function CopyProgressRoutine(ByVal TotalFileSize As Currency, ByVal TotalBytesTransferred As Currency, ByVal StreamSize As Currency, ByVal StreamBytesTransferred As Currency, ByVal dwStreamNumber As Long, ByVal dwCallbackReason As Long, ByVal hSourceFile As Long, ByVal hDestinationFile As Long, ByVal lpData As Long) As Long
'adjust the caption
Form1.Caption = CStr(Int((TotalBytesTransferred * 10000) / (TotalFileSize * 10000) * 100)) + "% complete..."
'allow user input
DoEvents
'continue filecopy
CopyProgressRoutine = PROGRESS_CONTINUE
End Function

robnet77
24-11-2003, 10:09
wow! Grazie :)

... per quanto riguarda il primo punto, mi servirebbe del codice che permetta di cambiare la directory di lavoro corrente, in modo che il programma non vada a cercare i files in "C:\Programmi\Microsoft Visual Studio\VB98"

ma, ad esempio, in C:\produzione


spero di essere stato più chiaro, intanto grazie :)

matpez
24-11-2003, 16:39
Originariamente inviato da robnet77
wow! Grazie :)

... per quanto riguarda il primo punto, mi servirebbe del codice che permetta di cambiare la directory di lavoro corrente, in modo che il programma non vada a cercare i files in "C:\Programmi\Microsoft Visual Studio\VB98"

ma, ad esempio, in C:\produzione


spero di essere stato più chiaro, intanto grazie :)

Scusami se sono di coccio, ma tu quando parli di file...che cosa intendi dire...fai creati da te....file che servono per il run di VB....cosa :confused:

fgmac
25-11-2003, 09:36
In effetti non ho capito neanche io quale sia il problema:
stai parlando di quando usi una dialog per andare a selezionare un file per caso?

Intanto butto giu' un suggerimento (potrebbe servire anche per la dialog, ma non mi ricordo esattamente):
App.Path
ti dice dove viene eseguito il programma.

a2000
25-11-2003, 10:00
Istruzione ChDir


Imposta una diversa directory o cartella predefinita.

Sintassi

ChDir percorso

L'argomento obbligatorio percorso è costituito da un'espressione stringa che identifica quale sarà la nuova directory o cartella predefinita. È possibile specificare l'unità. Se non si indica alcuna unità, ChDir imposterà la directory o cartella predefinita nell'unità corrente.

Osservazioni

L'istruzione ChDir cambia la directory predefinita ma non l'unità predefinita. Se, ad esempio, l'unità predefinita è C, la seguente istruzione imposterà la directory predefinita sull'unità D, ma C resterà l'unità predefinita:

ChDir "D:\TMP"

....


Vedere anche:
CurDir
Dir
ChDrive
RmDir
MkDir

matpez
25-11-2003, 12:52
Originariamente inviato da fgmac
In effetti non ho capito neanche io quale sia il problema:
stai parlando di quando usi una dialog per andare a selezionare un file per caso?

Intanto butto giu' un suggerimento (potrebbe servire anche per la dialog, ma non mi ricordo esattamente):
App.Path
ti dice dove viene eseguito il programma.

Si App.Path ti dice appunto la path di dove è posizionato l'exe o il progetto salvato....se nn salvi il progetto di default lui va a puntare nella directory dov'è situato VB6.exe

Ma penso che prima di eseguire un programma, tutti lo salviamo no :confused:

bsummer
25-11-2003, 15:22
Io la capisco essenzialmente in 2 modi.

1) Ha bisogna di accedere a file che si trovano in una determinata directory.

dim mypath as string

mypath = "c:\documenti\miadir\"

open mypath & <nomefile> ...

2) Usa una commondialog ed ha il problema che ogni volta che la visualizza a schermo la directory di lavoro è quella dove si trova l'applicazione e deve andare a selezionare files che si trovano sempre in una determinata directory...una palla ogni volta spostarcisi dentro.

In tal caso :

dim mypath as string

mypath = "c:\documenti\miadir\"

commondialog1.initDir = mypath

Aloha!

robnet77
25-11-2003, 18:02
ehm, avrei bisogno di andare a leggere diversi files che in genere mettiamo (nella nostra azienda) in c:\programmi\produzione , solamente che il programma VB me li cerca nella sua cartella predefinita e io, ad esempio, devo ogni volta scrivere

open "C:\programmi\produzione\etich.dat" for input as #nfile piuttosto che open "etich.dat" for input as #nfile


comunque grazie a tutti, siete dei grandi :eek: e ora apro un nuovo thread :p perché un mio amico mi ha chiesto di fargli un mini-programma per il gioco del lotto :muro:

matpez
26-11-2003, 02:01
Se nn spicifichi la path completa lui va a leggere dove è posizionalto il progetto o l'exe :)

Se il progetto nn è salvato, va a prendere la cartella di dove è VB6.exe :p

Hardware Upgrade Forum Database Error
Database Error Database error
The Hardware Upgrade Forum database has encountered a problem.

Please try the following:
  • Load the page again by clicking the Refresh button in your web browser.
  • Open the www.hwupgrade.it home page, then try to open another page.
  • Click the Back button to try another link.
The www.hwupgrade.it forum technical staff have been notified of the error, though you may contact them if the problem persists.
 
We apologise for any inconvenience.