Επιστροφή στο Forum : move αρχείων μεσα απο vb 6
Θέλω μεσα απο την vb 6 να μπορω να κανω move περιπου 5000 files απο ένα directory στο αλλο μεσα απο κώδικα. Επειδη αυτο θα γίνετε αρκετες φορες τον μήνα και δεν εχουν πάντα το ίδιο όνομα πως μπορει να γίνει εύκολα ?
δοκιμασα με το name αλλα δεν δέχεται wildcards (*.τχτ)
Το filecopy και μετά kill το αρχειο είναι παλι πολύπλοκο και πρεπει να ξέρω καθε φορα το filename.
Καμια λύση εύκολη ?
Δημιουργείς δύο FileListBox , File1 και File2
Προαιρετικά Listbox List1
Το πρώτο, File1, πρέπει να δείχνει τα περιεχόμενα του πηγαίου καταλόγου από όπου θα μετακινήσεις τα αρχεία
Το δεύτερο, πρέπει να δείχνει τον κατάλογο προορισμού στον οποίο θα μετακινήσεις τα αρχεία.
To List1 εμφανίζει τα αρχεία που μετακινήθηκαν.
File1.Refresh
File2.Refresh
Dim fil1, fs
Dim I As Integer, strfil As String
While File1.ListCount > 0
File1.ListIndex = 0
Set fs = CreateObject("Scripting.FileSystemObject")
strfil = File1.Path + "\" + File1.FileName
Set fil1 = fs.GetFile(strfil)
fil1.Move (File2.Path + "\" + File1.FileName)
File1.Refresh
File2.Refresh
List1.AddItem ("File :" + strfil + " has moved")
Wend
και εγώ κατι τετοιο ελεγα με filelistbox αλλα ελεγα μήπως υπήρχε κανας αλλος τρόπος με λιγότερες γραμμές...
Ξερει κανείς αν υπάρχει περιορισμός στα ποσα files μπορει να σηκώσει ενα filelistbox ?
Θελω ~10.000 files, θα παίξει ή θα σκάσει ?
Αν μπορεις να χρησημοποιησεις εξωτερικη εντολη με την Xcopy πιστευω οτι μπορεις να κανεις δουλεια.
Αν μπορεις να χρησημοποιησεις εξωτερικη εντολη με την Xcopy πιστευω οτι μπορεις να κανεις δουλεια.
με shell lες δηλαδη να παίξω ?
Ναι γίνεται και αυτό.
Μπορείς να τρέξεις την εντολή
"move x:\xxx\*.* y:\yyy "
Ναι γίνεται και αυτό.
Μπορείς να τρέξεις την εντολή
"move x:\xxx\*.* y:\yyy "
κλασικα το path είναι με κενο οποτε πρεπει καπως να βαλω τα εισαγωγικά μέσα. Δοκιμασα
Shell ("move " & Chr$(34) & "c:\PATH NAME\FOLDER\*.*" & Chr$(34) & " " & Chr$(34) & "c:\PATH NAME\FOLDER\NEW FOLDER" & Chr$(34))
αλλα μου βγαζει run-time error 53 "file not found". Την ίδια εντολη την έκανε paste σε command-prompt και δουλευει κανονικα
Μάλλον bug
Για δοκίμασε με ενδιάμεσο batch file.
(το οποίο θα είναι σε άσχετο κατάλογο από τον πηγαίο, γιατί αλλιώς θα τρέξει μόνο μία φορά)
Πρέπει να βεβαιωθείς πρώτα ότι το batch δουλεύει σωστά.
Πρόσεξε το θέμα με τα "αυτάκια" " " στους μεγάλους καταλόγους
Το move eιναι εντολη κονσολας και οχι αρχειο για αυτο σου λεει "file not found"
τωρα δεν ξερω πως συνδιαζεται το cmd.exe με τις υποεντολες του.
Το ακόλουθο είναι κατά την άποψη μου ο καλύτερος τρόπος για μετακίνηση αρχείων.
Το παραδείγμα είναι από το MSDN αν κάνεις αναζήτηση το MoveFile method.
Sub MoveAFile(Drivespec)
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
fso.MoveFile Drivespec, "c:\windows\desktop\"
End Sub
και εγω νομίζω τελικα οτι το filesystemobject έιναι η καλύτερη λύση...
για αυτο εχει κανεις καμια ιδεα ?
Ξερει κανείς αν υπάρχει περιορισμός στα ποσα files μπορει να σηκώσει ενα filelistbox ?
Θελω ~10.000 files, θα παίξει ή θα σκάσει ?
Δυστυχώς το shell δουλεύει μόνο σε current path- δε διαβάζει τη μεταβλητή %PATH%
δοκίμασε:
1. Να δώσεις το fullpath προς το move.com
2. Να παίξεις με την shellex (api call)<--δε θυμάμαι αν γίνεται με DOS Commands
Αλλιώς FSO is your friend
Για shell καλύτερα να προτιμήσεις το:
Dim WinShell As Object
Set WinShell = CreateObject("wscript.shell")
WinShell.run <Path>
BEGIN LESSON
Ο σωστότερος τρόπος είναι αυτός:
βάλε στο public section του module που θες την δήλωση:
Public Declare Function MoveFile Lib "kernel32" Alias "MoveFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String) As Long
Τώρα απλά καλείς την movefile μέσα από την vb.
END LESSON
@ ADSLgr.com All rights reserved.