Flin Skrevet 7. juni 2010 Del Skrevet 7. juni 2010 Hei. Etter å ha googlet litt og i grunn ikke fått noe godt svar på det jeg lurte på så spørr jeg her. Jeg har en mappe som inneholder filer og andre mapper. Det jeg ønsker er å kopiere filene og mappene til en annen mappe. Slik at vi altså får to mapper med identisk innhold. Så hvordan burde jeg gå frem for å gjøre dette enklest mulig? Har sett noen som bruker system-command, men det virker rart. Finnes det noen innebygde funksjoner for dette? Også, finnes det en rask og enkel måte for å liste opp alle filer og mapper i en mappe? Noe som ligner dir() i php. Lenke til kommentar
Blåbær Skrevet 8. juni 2010 Del Skrevet 8. juni 2010 Er det ikke litt tungvindt å gjøre det med c eller c++, anbefaler heller ett skriptespråk som python eller bare dosprogrammering. http://www.allenware.com/icsw/icswidx.htm http://docs.python.org/library/shutil.html Lenke til kommentar
GeirGrusom Skrevet 8. juni 2010 Del Skrevet 8. juni 2010 Du burde ha en god grunn til å gjøre dette i C++ istedet for å merke alle mapper og trykke Ctrl+C, eventuelt bash/cmd/powershell. Ellers er slikt individuelt for forskjellige operativsystemer. Lenke til kommentar
snippsat Skrevet 8. juni 2010 Del Skrevet 8. juni 2010 (endret) Viss du ikke har programmert i C/C++,er python et bedere valg for dette. Eller som GeirGrusom bash/cmd/powershell. Jeg bruker python til det meste,ettersom det er språket jeg liker klart best. jeg har en mappe som inneholder filer og andre mapper. Det jeg ønsker er å kopiere filene og mappene til en annen mappe. Slik at vi altså får to mapper med identisk innhold. Denne kommadoen gjør akkurat det du ønsker distutils.dir_util.copy_tree import os import distutils.dir_util distutils.dir_util.copy_tree('c:/test', 'c:/testbak') Også, finnes det en rask og enkel måte for å liste opp alle filer og mapper i en mappe? Noe som ligner dir() i php. import os print os.listdir('c:/test') #Lister opp alle filer og mapper i c:\test Endret 11. juni 2010 av SNIPPSAT Lenke til kommentar
Flin Skrevet 9. juni 2010 Forfatter Del Skrevet 9. juni 2010 Du burde ha en god grunn til å gjøre dette i C++ istedet for å merke alle mapper og trykke Ctrl+C, eventuelt bash/cmd/powershell. Ellers er slikt individuelt for forskjellige operativsystemer. Nei geir, jeg er bare lei av å måtte kopiere filer manuelt. Selvfølgelig har jeg en god grunn, dette er del av et litt større prosjekt jeg driver med. SNIPPSAT: Bruker c++ fordi det er det språket jeg kan, er mulig det kan gjøres lettere i python og jeg har lyst til å lære meg det, så kanskje jeg skulle se på mulighetene der. Et spørsmål, hvordan kjører du python aplikasjoner? Brukervendlighet er et stikkord her. Lenke til kommentar
GeirGrusom Skrevet 9. juni 2010 Del Skrevet 9. juni 2010 Python runtime installeres, og deretter er det bare å dobbeltklikke på pythonfilene. Lenke til kommentar
snippsat Skrevet 9. juni 2010 Del Skrevet 9. juni 2010 (endret) hvordan kjører du python aplikasjoner? Brukervendlighet er et stikkord her. Installere python 2.6.5 http://www.python.org/download/ IDLE (Python GUI) Fil->new vindow Lim inn koden og run(F5) Fra cmd. python kode_navn.py Dobbelklikk på .py ser man som regel ikke hva koden gjør. Vinduet blir borte,kan legge inn raw_input('Press any key to quit') Pyscripter installere og lim inn koden,trykk på run knappen en enkel og god editor. http://code.google.com/p/pyscripter/ Endret 9. juni 2010 av SNIPPSAT Lenke til kommentar
Flin Skrevet 9. juni 2010 Forfatter Del Skrevet 9. juni 2010 Installere python 2.6.5 http://www.python.org/download/ Da er python ute av bilde, dette er myntet på noen som ikke har mye data erfaring og jeg ønsker ikke at de må instalere en hel haug med tull. Tregner forresten en del andre funksjoner som jeg er sikker på at c++ har og som jeg har løsninger for. Får vel bare forsette å google. Poster løsningen her om jeg finner den. Lenke til kommentar
GeirGrusom Skrevet 9. juni 2010 Del Skrevet 9. juni 2010 (endret) Hvis Windows er eneste kravet, så kan du kikke på Directory og Filbehandlingsfunksjonene for det. Du må etter det jeg vet, kopiere en og en fil, og opprette mapper. (eventuelt bruke system-kommandoen og robocopy, eller xcopy dersom Windows XP eller eldre brukes) Dersom du går for systemkallene er det vanlig å lage en liste over alle filer som skal kopieres før kopieringen startes, ettersom dette fører til at du lett kan regne ut hvor lang tid det tar, og selve kopieringen kan gjøres iterativt. Merk at dersom du går for system kommandoen, anbefales det at du bruker robocopy fremfor xcopy fordi xcopy ikke støtter filbaner over 256 tegn. For Windows API skal det ikke være noen begrensning. edit: hvis du kan fortelle litt mer om prosjektet så kanskje vi kan anbefale andre verktøy som kan brukes? Dersom Windows brukes, kan kanskje et .NET språk være et alternativ, eventuelt kanskje Java ettersom de aller fleste allerede har Java tilgjengelig på maskinen fra før (men det er ingen selvfølge) .NET følger med Windows ofte, men det kan være lurt å sjekke om brukeren allerede har det, ettersom noen enten fjerner .NET eller huker det vekk fra Windows Update. Windows Vista og Windows 7 har .NET 3.5 preinstallert, I Windows XP tror jeg 2.0 følger med SP3, men jeg er usikker. De fleste andre API-er enn C++ har filbehandling i standardbiblioteket. Endret 9. juni 2010 av GeirGrusom Lenke til kommentar
Flin Skrevet 10. juni 2010 Forfatter Del Skrevet 10. juni 2010 edit: hvis du kan fortelle litt mer om prosjektet så kanskje vi kan anbefale andre verktøy som kan brukes? Dersom Windows brukes, kan kanskje et .NET språk være et alternativ, eventuelt kanskje Java ettersom de aller fleste allerede har Java tilgjengelig på maskinen fra før (men det er ingen selvfølge) .NET følger med Windows ofte, men det kan være lurt å sjekke om brukeren allerede har det, ettersom noen enten fjerner .NET eller huker det vekk fra Windows Update. Windows Vista og Windows 7 har .NET 3.5 preinstallert, I Windows XP tror jeg 2.0 følger med SP3, men jeg er usikker. De fleste andre API-er enn C++ har filbehandling i standardbiblioteket. Har tenkt på Java, siden det er så enkelt å greit. Grunnen til at jeg startet med C++ er at det var det verktøyet jeg hadde klart. Fant en CopyFile() som skal fungere for Windows, men det virker som om Windows ikke stoler på programmet mitt eller at kommandon ikke støttes for Win7. Prosjektet er følgende: Jeg ønsker en rask og lett måte for å kopiere over filer til mange USB minnepinner. Ved hjelp av en USB-hub kan jeg koble en del til datan samtidig så nå mangler bare programmet. Da skjønner dere kanskje at kopieringen bare er en liten del av haugen, jeg må også finne en god måte for å fortelle programmet hvilke disk den skal kopiere til. La oss si at vi setter inn to minnepenner, J: og H:, da vil jeg kun kopiere til J og H. Har tenkt på en måte å gjøre dette automatisk, men jeg tror jeg ender opp med at brukeren må skrive inn hvilke disker filene skal kopieres til. Det er vedlig viktig å oppretholde mappestruktur. Lenke til kommentar
snippsat Skrevet 10. juni 2010 Del Skrevet 10. juni 2010 (endret) Da er python ute av bilde, dette er myntet på noen som ikke har mye data erfaring og jeg ønsker ikke at de må instalere en hel haug med tull. Tregner forresten en del andre funksjoner som jeg er sikker på at c++ har og som jeg har løsninger for. Får vel bare forsette å google. Poster løsningen her om jeg finner den. Det går greit og gjør om .py filer til exe med py2exe Da kan man gi ut en exe-fil eller en setup-fil(viss man bruker inno-setup),som begge virker uten noe pre-installed. Dette bør være en grei oppgave i de fleste språk. Batch. http://en.kioskea.net/forum/affich-30405-creating-a-batch-file-to-copy-a-directory C++ http://www.gamedev.net/community/forums/topic.asp?topic_id=399558 http://www.cplusplus.happycodings.com/Algorithms/code38.html http://www.daniweb.com/forums/thread125446.html Endret 10. juni 2010 av SNIPPSAT Lenke til kommentar
Flin Skrevet 11. juni 2010 Forfatter Del Skrevet 11. juni 2010 CopyFile funksjonen fungerer ikke helt som jeg skulle ønske eller for å si det sånn den fungerer ikke i det hele tatt. Selve funksjonen er nok grei, men det virker som om den ikke får tilgang til filen av Windows. Selv om jeg har gitt programmet 100% tilit. Lenke til kommentar
[kami] Skrevet 11. juni 2010 Del Skrevet 11. juni 2010 slik kopierer du en fil til en annen i c++ #include <ftsream> int main() { std::ifstream in ("oldfile.txt"); // open original file std::ofstream out("newfile.txt"); // open target file out << in.rdbuf(); // read original file into target out.close(); // explicit close, unnecessary in this case in.close();// explicit close, unnecessary in this case } for å kopiere et directory, må du traversere alt i directoriet. her er det nok lurt med en rekusiv funksjon. (hente fillister for directory er OS spesifik, windows og linux har forskjellige api'er her) Men jeg vil heller spare deg for det og guide deg til boost med en gang. http://www.boost.org/doc/libs/1_43_0/libs/filesystem/doc/index.htm Ta spesiellt en god titt på find_file eksempelet (da du må gjøre ting på en tilsvarende måte.. Men istede for å sjekke filnavnet, kopiere det et annet sted). Lenke til kommentar
GeirGrusom Skrevet 11. juni 2010 Del Skrevet 11. juni 2010 Jeg tror det er bedre å la operativsystemet behandle kopiering av filer ettersom den kan bruke optimaliserte løsninger som memory mapping og lignende, fremfor å manuelt skrive filene på nytt. Bare min mening da. Lenke til kommentar
[kami] Skrevet 11. juni 2010 Del Skrevet 11. juni 2010 Jeg tror det er bedre å la operativsystemet behandle kopiering av filer ettersom den kan bruke optimaliserte løsninger som memory mapping og lignende, fremfor å manuelt skrive filene på nytt. Bare min mening da. jau, helt enig. Men la inn et forslag for programatisk løsning. Personlig ville jeg bruke system("cp/copy/rsync/etc"); det går jo an å lese resultatet av et system call, så du vet om det succeded eller ikke også. Lenke til kommentar
GeirGrusom Skrevet 11. juni 2010 Del Skrevet 11. juni 2010 ' date='11. juni 2010 - 17:20' timestamp='1276269654' post='15789398'] Jeg tror det er bedre å la operativsystemet behandle kopiering av filer ettersom den kan bruke optimaliserte løsninger som memory mapping og lignende, fremfor å manuelt skrive filene på nytt. Bare min mening da. jau, helt enig. Men la inn et forslag for programatisk løsning. Personlig ville jeg bruke system("cp/copy/rsync/etc"); det går jo an å lese resultatet av et system call, så du vet om det succeded eller ikke også. Det er jo helt klart den enkleste løsningen også. Lenke til kommentar
snippsat Skrevet 11. juni 2010 Del Skrevet 11. juni 2010 Personlig ville jeg bruke system("cp/copy/rsync/etc"); Bruke operativsystemet er helt klar en grei løsning som GeirGrusom var inne på. rsync er da en linux løsning,det går og installere rsync for og få den funksjonen i windows. system() call er nogenlunde likt i C++ og python. #include <iostream> using namespace std; int main () { system("Do system call"); } #Python import os os.system('do system call') #Bare en test med gamle xcopy,som fungerer greit #Viss man ikke har filbaner på over over 256 tegn #include <iostream> using namespace std; int main () { system("xcopy /S /E E:\\dir1 E:\\dir2"); } #Python import os os.system("xcopy /S /E E:\\dir1 E:\\dir2") Lenke til kommentar
zotbar1234 Skrevet 13. juni 2010 Del Skrevet 13. juni 2010 (endret) Personlig ville jeg bruke system("cp/copy/rsync/etc"); det går jo an å lese resultatet av et system call, så du vet om det succeded eller ikke også. ... som er dessverre skikkelig, skikkelig pes, dersom man skal gjøre det helt riktig (tips: filnavn kan inneholde fryktelig mye rart. Quoting blir ikke helt trivielt å gjøre riktig). Boost må ha noe for dette? edit: Åh, dette må være definisjonen på ironi -- søppelforumprogramvaren takler ikke '[' i "kami" sitt navn. Endret 13. juni 2010 av zotbar1234 Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå