Gå til innhold

Endre filnavn med c++?


Anbefalte innlegg

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
Videoannonse
Annonse
Gjest Slettet-Pqy3rC

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

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.

  • Liker 1
Lenke til kommentar
Gjest Gjest slettet-ld9eg7s96q

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 av Gjest slettet-ld9eg7s96q
Lenke til kommentar
Gjest Slettet-Pqy3rC

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

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 av Gjest slettet-ld9eg7s96q
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...