PDA

Επιστροφή στο Forum : move αρχείων μεσα απο vb 6



great
21-07-05, 15:55
Θέλω μεσα απο την vb 6 να μπορω να κανω move περιπου 5000 files απο ένα directory στο αλλο μεσα απο κώδικα. Επειδη αυτο θα γίνετε αρκετες φορες τον μήνα και δεν εχουν πάντα το ίδιο όνομα πως μπορει να γίνει εύκολα ?
δοκιμασα με το name αλλα δεν δέχεται wildcards (*.τχτ)
Το filecopy και μετά kill το αρχειο είναι παλι πολύπλοκο και πρεπει να ξέρω καθε φορα το filename.

Καμια λύση εύκολη ?

thama
21-07-05, 16:42
Δημιουργείς δύο 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

great
22-07-05, 10:09
και εγώ κατι τετοιο ελεγα με filelistbox αλλα ελεγα μήπως υπήρχε κανας αλλος τρόπος με λιγότερες γραμμές...

Ξερει κανείς αν υπάρχει περιορισμός στα ποσα files μπορει να σηκώσει ενα filelistbox ?
Θελω ~10.000 files, θα παίξει ή θα σκάσει ?

XPHSTOS29
22-07-05, 12:45
Αν μπορεις να χρησημοποιησεις εξωτερικη εντολη με την Xcopy πιστευω οτι μπορεις να κανεις δουλεια.

great
22-07-05, 12:46
Αν μπορεις να χρησημοποιησεις εξωτερικη εντολη με την Xcopy πιστευω οτι μπορεις να κανεις δουλεια.

με shell lες δηλαδη να παίξω ?

thama
22-07-05, 12:48
Ναι γίνεται και αυτό.
Μπορείς να τρέξεις την εντολή
"move x:\xxx\*.* y:\yyy "

great
22-07-05, 13:04
Ναι γίνεται και αυτό.
Μπορείς να τρέξεις την εντολή
"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 και δουλευει κανονικα

thama
22-07-05, 13:29
Μάλλον bug
Για δοκίμασε με ενδιάμεσο batch file.
(το οποίο θα είναι σε άσχετο κατάλογο από τον πηγαίο, γιατί αλλιώς θα τρέξει μόνο μία φορά)

Πρέπει να βεβαιωθείς πρώτα ότι το batch δουλεύει σωστά.
Πρόσεξε το θέμα με τα "αυτάκια" " " στους μεγάλους καταλόγους

XPHSTOS29
22-07-05, 13:42
Το move eιναι εντολη κονσολας και οχι αρχειο για αυτο σου λεει "file not found"

τωρα δεν ξερω πως συνδιαζεται το cmd.exe με τις υποεντολες του.

pts
22-07-05, 13:58
Το ακόλουθο είναι κατά την άποψη μου ο καλύτερος τρόπος για μετακίνηση αρχείων.

Το παραδείγμα είναι από το MSDN αν κάνεις αναζήτηση το MoveFile method.

Sub MoveAFile(Drivespec)
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
fso.MoveFile Drivespec, "c:\windows\desktop\"
End Sub

great
22-07-05, 14:49
και εγω νομίζω τελικα οτι το filesystemobject έιναι η καλύτερη λύση...

για αυτο εχει κανεις καμια ιδεα ?

Ξερει κανείς αν υπάρχει περιορισμός στα ποσα files μπορει να σηκώσει ενα filelistbox ?
Θελω ~10.000 files, θα παίξει ή θα σκάσει ?

yiapap
22-07-05, 15:50
Δυστυχώς το shell δουλεύει μόνο σε current path- δε διαβάζει τη μεταβλητή %PATH%
δοκίμασε:
1. Να δώσεις το fullpath προς το move.com
2. Να παίξεις με την shellex (api call)<--δε θυμάμαι αν γίνεται με DOS Commands

Αλλιώς FSO is your friend

pts
22-07-05, 16:49
Για shell καλύτερα να προτιμήσεις το:

Dim WinShell As Object

Set WinShell = CreateObject("wscript.shell")
WinShell.run <Path>

vasper
22-07-05, 16:56
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.