Abigor Skrevet 17. januar 2013 Del Skrevet 17. januar 2013 Hei jeg ønsker å lage et lite program for windows som skal: -hente mappe-posisjon fra der den kjøres -finne alle filer i alle mapper i og innenfor sin egen posisjon -endre filnavnet Filnavnet ønsker jeg å endre med egendefinerte regler skrevet rett inn i koden. Kan noen gi meg tips for dette? Lenke til kommentar
GeirGrusom Skrevet 18. januar 2013 Del Skrevet 18. januar 2013 Windows har et eget API for dette. Etter det jeg vet, så er det ikke med noe STL bibliotek for de funksjoene. Det finnes kanskje noen API med høyere abstraksjon enn Win32-API-et har. Er det noen spesifikk grunn til at du vil gjøre dette i C/C++? Lenke til kommentar
Abigor Skrevet 18. januar 2013 Forfatter Del Skrevet 18. januar 2013 Nei det er ikke det. Men jeg kunne godt tenke meg å lære meg det i c++. Det er jo mange programmer til windows som håndterer filer og som er skrevet i c++. Hvordan kan jeg ta ibruk dette i Visual Studio? Lenke til kommentar
GeirGrusom Skrevet 18. januar 2013 Del Skrevet 18. januar 2013 Nei det er ikke det. Men jeg kunne godt tenke meg å lære meg det i c++. Det er jo mange programmer til windows som håndterer filer og som er skrevet i c++. Hvordan kan jeg ta ibruk dette i Visual Studio? #include <Windows.h> Lenke til kommentar
Abigor Skrevet 18. januar 2013 Forfatter Del Skrevet 18. januar 2013 Det var flott! Takk. Lenke til kommentar
Lycantrophe Skrevet 18. januar 2013 Del Skrevet 18. januar 2013 find [path] -name '[pattern]' -exec mv {} [new] \; Finnes det ikke noe slikt for Windows? Uansett er det en oppgave hvor et scriptingspråk er godt egnet. Om det er for å lære C++ er det nå så, men da kommer jeg på bedre ting enn å avhenge av Windpws-APIer. Lenke til kommentar
Gjest Slettet-Pqy3rC Skrevet 18. januar 2013 Del Skrevet 18. januar 2013 Om det er for å lære C++ er det nå så, men da kommer jeg på bedre ting enn å avhenge av Windpws-APIer. Tja... han kan jo skrive det som en template og hvor del 2 blir å få det til å kjøre under Linux. Lenke til kommentar
Lycantrophe Skrevet 18. januar 2013 Del Skrevet 18. januar 2013 Trenger ikke blande inn templates for det, men det er jo en gøyal oppgave å skrive et interface og gjøre en implementasjon på forskjellige systemer. Lenke til kommentar
GeirGrusom Skrevet 18. januar 2013 Del Skrevet 18. januar 2013 Programmeringsspråk er så mye mer konsekvente enn det shell-språk er... ikke at Win32-API er et bra eksempel på dette. Men det å skrive slike ting i C# er så mye enklere enn shell-språk. Man må skrive litt mer, men det er så utrolig mye mer konsekvent og pålitelig enn det bash er. Eksempelvis det å liste fra en mappe og bruker regex for å velge filer krever null oppslag i dokumentasjonen for å få til. 1 Lenke til kommentar
Gjest Gjest slettet-ld9eg7s96q Skrevet 21. januar 2013 Del Skrevet 21. januar 2013 (endret) QT metode: #include <QtCore> #include <QDebug> void finnFil(const QString& sDir, QString kilde, QString maal) { QDir dir(sDir); QFileInfoList list = dir.entryInfoList(); for (int iList=0; iList < list.count(); iList++) { QFileInfo info = list[iList]; QString kildeFilSti = info.filePath(); if (info.isDir()) { if (info.fileName()!=".." && info.fileName()!=".") { finnFil(kildeFilSti, kilde, maal); } } else if (info.isFile() && info.fileName() == kilde) { QFile fil; QString nyttFilNavn = info.absoluteDir().absolutePath(); nyttFilNavn.append("/"); nyttFilNavn.append(maal); fil.rename(kildeFilSti, nyttFilNavn); qDebug() <<kildeFilSti <<"\r\n\r\nHar endret navn til:\r\n\r\n" <<nyttFilNavn; fil.close(); } } } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QDir dir; QString arbeidsKatalog = dir.absolutePath(); qDebug() <<"Gjeldende arbeidskatalog:\r\n" <<dir.absolutePath(); // Returnerer katalogen programmet kjøres ifra finnFil(arbeidsKatalog, "tekstdokument.txt", "nyttnavn.txt"); // Endre filnavn return a.exec(); } Fungerer like fint om det er i Windows, Mac, Linux m.m. PS: Du kan kompilere dette fra Visual Studio hvis du bygger QT bibliotekene for MSVC++, men QT's IDE er nå langt bedre i bruk enn microsoft sin IMHO. PPS: Jeg kunne selvsagt gjort programmet mye mer brukbart ved å ta imot argumenter fra argv, men dette ble snekret sammen temmelig kjapt og dirty Endret 21. januar 2013 av Gjest slettet-ld9eg7s96q Lenke til kommentar
Gjest Slettet-Pqy3rC Skrevet 21. januar 2013 Del Skrevet 21. januar 2013 Det finnes en header for dette (filnavn, directory) i Boost også såvidt jeg husker. Dog blir vel både QT og Boost noe utenfor hva som kan kalles standard C++ (om noe så er vel Boost nærmest). Lenke til kommentar
Gjest Gjest slettet-ld9eg7s96q Skrevet 21. januar 2013 Del Skrevet 21. januar 2013 (endret) QT bruker standard C++ men bygger på språket med sin meta object compiler og makroer. Hvis man vil være purist av prinsipp er det jo helt greit men også en smule masochistisk spør du meg. Man bruker de verktøyene man har til rådighet, således faller dette ikke utenfor domenet til C++ etter min mening. Endret 21. januar 2013 av Gjest slettet-ld9eg7s96q 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å