kostenloser Webspace werbefrei: lima-city


Verbesserungsvorschläge für meine TrackReName.cpp

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    trancedrome

    trancedrome hat kostenlosen Webspace.

    Moinsen,

    es ist Weihnachten und ich schreib mal wieder sinnfreie Programme die mir die Arbeit am PC erleichtern xD

    Hab mir heute Morgen folgendes aus den Fingern gesaugt und es funktioniert auch....
    jetzt wären Verbesserungsvorschläge cool; hier der Code:

    #include <conio.h>
    #include <iostream.h>
    #include <string.h>
    #include <stdlib.h>
    #include <time.h>
    #include <stdio.h>
    #include <cstdlib.h>
    #include <fstream.h>
    #include <cstdio.h>
    
    int main(int argc, char* argv[])
    {
    if(!open("tracklist.txt", ios::in))
      {
      cout << "Bitte tracklist.txt generieren!!" << endl;
      getch();
      exit(1);
      }
    
    system("dir *.mp3 /B > text.txt");
    clrscr();
    
    ifstream text;
    string stext;
    text.open("text.txt", ios::in);
    
    ifstream tracklist;
    string stracklist;
    tracklist.open("tracklist.txt", ios::in);
    
    
    while(!tracklist.eof())
         {
         getline(text, stext);
         getline(tracklist, stracklist);
    
         stext = stext.substr(0, stext.length()-1);
         stracklist = stracklist.substr(0, stracklist.length()-1);
    
         system(("rename \""+stext+"\" \""+stracklist+"\"").c_str());
         }
    text.close();
    tracklist.close();
    
    cout << "Fertig" << endl;
    
    getch();
    return 0;


    Man benötigt nur eine Datei mit den Tracks, wie sie zum Schluss heißen sollen.
    ich weiß es sind ein paar viele Bibliotheken, aber ich hab erst mal alle rein geschrieben die ich so wusste...

    Vorschläge sind willkommen,
    sollten dann aber auch funktionieren.

    MfG Trancer.

    P.S.: Hab länger keine Programme geschrieben, deshalb sieht das auch noch ein wenig unstrukturiert aus.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. t*****b

    trancedrome schrieb:
    #include <conio.h>
    #include <iostream.h>
    #include <string.h>
    #include <stdlib.h>
    #include <time.h>
    #include <stdio.h>
    #include <cstdlib.h>
    #include <fstream.h>
    #include <cstdio.h>



    Du scheinst nicht zu wissen, für das die jeweiligen Header zuständig sind. Informiere dich darüber, dann weißt du welche du benötigst.

    ifstream text;
    string stext;
    text.open("text.txt", ios::in);
    
    ifstream tracklist;
    string stracklist;
    tracklist.open("tracklist.txt", ios::in);


    Das hier könnte man entweder mit if-else oder switch-case (+default) lösen, um abzusichern, dass wirklich jeweils eins von beiden verwendet wird.

    Ansonsten siehts doch schonmal ganz gut aus
  4. Autor dieses Themas

    trancedrome

    trancedrome hat kostenlosen Webspace.

    Folgende Bibliotheken hab ich mal entfernt (Programm läuft immer noch):
    #include <time.h>
    #include <stdio.h>
    #include <cstdlib.h>
    #include <cstdio.h>

    trueweb schrieb:
    trancedrome schrieb:
    ifstream text;
    string stext;
    text.open("text.txt", ios::in);
    
    ifstream tracklist;
    string stracklist;
    tracklist.open("tracklist.txt", ios::in);


    Das hier könnte man entweder mit if-else oder switch-case (+default) lösen, um abzusichern, dass wirklich jeweils eins von beiden verwendet wird.

    Ansonsten siehts doch schonmal ganz gut aus


    An der Stelle werden 2 Daten eingelesen, die benötigt werden.
    text.txt wird durch das Programm erstellt
    system("dir *.mp3 /B > text.txt");


    tracklist.txt muss man selber erstellen,
    so wie man die Track-Files umbenennt haben möchte.
    Eine schönere und einfachere Funktiuon ist mir leider nicht übern weggelaufen...

    MfG Trancer.


    Beitrag zuletzt geändert: 24.12.2010 20:34:02 von trancedrome
  5. Also meine erster Verbesserungsvorschlag wäre tatsächlich Strukturierung. Das solltest du mit ein paar Unterteilung in Funktionen hinbekommen.
    Was mich dann noch stören würde, wäre die "text.txt" Datei. Also ich würde wenn du schon eine Temporäre-Datei benutzt diese beim Programmende löschen und eine Endung wie ".tmp" wählen.
    Eine letzte Sache wäre dann eine sprechende Bezeichnung der Variablen und Textdateien.
    Beispiel:
    text.txt ->oldtracks.tmp
    tracklist.txt -> targettracks.txt
    und die Variablen dem entsprechend.

    Wenn es dir auch um Anregungen für Funktionserweiterungen geht. Du könntest im Zuge des Umbenennens auch direkt eine ?.m3u Datei erstellen. Dann hast du auch direkt ne Playlist mit dabei.
  6. Autor dieses Themas

    trancedrome

    trancedrome hat kostenlosen Webspace.

    Hier ist mal die derzeitge v0.0.8:

    #include <conio.h>
    #include <iostream.h>
    #include <string.h>
    #include <stdlib.h>
    #include <fstream.h>
    
    
    int main(int argc, char* argv[])
    {
    ifstream FileTest("tracklist.txt");
    if(!FileTest)
      {
      cout << "Bitte tracklist.txt generieren!!" << endl;
      getch();
      exit(1);
      }
    
    system("dir *.mp3 /B > oldtracks.tmp");
    clrscr();
    
    ifstream oldtracks;
    string sot;
    oldtracks.open("oldtracks.tmp", ios::in);
    
    system("echo. >> tracklist.txt");
    ifstream tracklist;
    string stl;
    tracklist.open("tracklist.txt", ios::in);
    
    
    while(!tracklist.eof())
         {
         getline(oldtracks, sot);
         getline(tracklist, stl);
    
         sot = sot.substr(0, sot.length()-1);
         stl = stl.substr(0, stl.length()-1);
    
         system(("rename \""+sot+"\" \""+stl+"\"").c_str());
         }
    
    oldtracks.close();
    tracklist.close();
    
    system("del oldtracks.tmp /F /S /Q");
    return 0;
    }

    Hat noch wer einen Vorschlag?

    ------------------------------------------------------------------------------------------------------------------------------------------------

    klauz schrieb:
    Wenn es dir auch um Anregungen für Funktionserweiterungen geht. Du könntest im Zuge des Umbenennens auch direkt eine ?.m3u Datei erstellen. Dann hast du auch direkt ne Playlist mit dabei.

    *.m3u benutz ich eher seltener, deshalb hab ich diese funktion erst mal nicht eingebaut.

    ------------------------------------------------------------------------------------------------------------------------------------------------

    MfG Trancer ;-)

    Beitrag zuletzt geändert: 5.2.2011 1:19:27 von trancedrome
  7. Hallo trancedome,

    mir war gerade etwas langweilig, da hab ich mir gedacht, es wäre gut, wenn man den Ordner und die Liste mit den neuen Name auf der Kommandozeile angeben könnte. Außerdem kann man ja auch die Erzeugung der temporären Datei vermeiden und, damit die Sache richtig Spaß macht, noch ein bisschen OOA/OOD-Overkill reinbauen.
    Heraus kam das hier:
    #include <iostream>
    #include <fstream>
    #include <string>
    #include <vector>
    #include <algorithm>
    #include <windows.h>
    
    using namespace std;
    
    bool file_exists(const string& path)
    {
        DWORD attr;
    
        attr = GetFileAttributes(path.c_str());
        if(attr == INVALID_FILE_ATTRIBUTES)
            return false;
        else
            return true;
    }
    
    bool file_is_folder(const string& path)
    {
        DWORD attr;
    
        attr = GetFileAttributes(path.c_str());
        if(attr & FILE_ATTRIBUTE_DIRECTORY)
            return true;
        else
            return false;
    }
    
    class Track
    {
        private:
        string file_path;
        string file_name;
        string file_folder;
    
        void setup(const string& path)
        {
            char full_path[MAX_PATH];
            char *name_start;
    
            GetFullPathName(path.c_str(), MAX_PATH, full_path, &name_start);
    
            file_path = full_path;
            file_name = name_start;
            file_folder = file_path.substr(0,file_path.rfind("\\")+1);
        }
    
        public:
        Track(const string& path)
        {
            setPath(path);
        }
    
        Track(const Track& track):
            file_path(track.file_path), file_name(track.file_name), file_folder(track.file_folder)
        {}
    
        const string& getPath() const
        {
            return file_path;
        }
    
        const string& getName() const
        {
            return file_name;
        }
    
        const string& getFolder() const
        {
            return file_folder;
        }
    
        bool setPath(const string& path)
        {
            if(file_exists(path) && !file_is_folder(path))
            {
                setup(path);
                return true;
            }
    
            return false;
        }
    
        bool rename(const string& name, bool overwrite=false)
        {
            string new_path;
    
            if(name.find("\\") != string::npos)
                return false;
    
            new_path = file_folder + name;
    
            if(!overwrite && file_exists(new_path))
                return false;
    
            if(MoveFile(file_path.c_str(), new_path.c_str()))
            {
                file_path = new_path;
                file_name = name;
                return true;
            }
    
            return false;
        }
    
    };
    
    class Tracklist
    {
        private:
        string folder;
        vector<Track*> tracks;
    
        Tracklist(const Tracklist& tl) {}
    
        void setup(const string& track_folder)
        {
            WIN32_FIND_DATA find_data;
            HANDLE h_find;
            string pattern;
    
            for(size_t i=0;i<tracks.size();i++)
                delete tracks[i];
    
            tracks.clear();
    
            folder = track_folder;
            if(folder[folder.size()-1] != '\\')
                folder.append("\\");
    
            pattern = folder + "*.mp3";
    
            h_find = FindFirstFile(pattern.c_str(), &find_data);
    
            if(h_find == INVALID_HANDLE_VALUE)
                return;
    
            do
            {
                tracks.push_back(new Track(folder + find_data.cFileName));
            }
            while(FindNextFile(h_find, &find_data));
    
            sort(tracks.begin(), tracks.end());
    
            CloseHandle(h_find);
        }
    
        public:
        Tracklist(const string& track_folder = "")
        {
            open(track_folder);
        }
    
        ~Tracklist()
        {
            for(size_t i=0;i<tracks.size();i++)
                delete tracks[i];
        }
    
        bool open(const string& track_folder)
        {
            if(file_exists(track_folder) && file_is_folder(track_folder))
            {
                setup(track_folder);
                return true;
            }
    
            return false;
        }
    
        size_t size() const
        {
            return tracks.size();
        }
    
        Track* operator[](int i) const
        {
            return tracks[i];
        }
    };
    
    void usage(const string& app_name)
    {
        size_t pos;
    
        cout << "Usage:" << endl;
    
        pos = app_name.rfind("\\");
        if(pos == string::npos)
            cout << app_name << " track_folder name_list" << endl;
        else
            cout << app_name.substr(pos+1) << " track_folder name_list" << endl;
    }
    
    int main(int argc, const char** argv)
    {
        vector<string> new_names;
    
        if(argc < 3)
        {
            usage(argv[0]);
            return 1;
        }
    
        if(!file_exists(argv[1]) || !file_is_folder(argv[1]))
        {
            cerr << "Error: track_folder is an invalid foldername." << endl;
            return 1;
        }
    
        if(!file_exists(argv[2]) || file_is_folder(argv[2]))
        {
            cerr << "Error: name_list is an invalid filename." << endl;
            return 1;
        }
    
        Tracklist tl(argv[1]);
        ifstream fin(argv[2], ifstream::in);
    
        if(!fin.good())
        {
            cerr << "Error: Can't open name list." << endl;
            return 1;
        }
    
        while(fin.good())
        {
            string name;
            getline(fin, name);
            if(name.length() > 0)
                new_names.push_back(name);
        }
    
        if(new_names.size() != tl.size())
        {
            cerr << "Error: count of names does not match track count." << endl;
            return 1;
        }
    
        for(size_t i=0;i<tl.size();i++)
        {
            if(!tl[i]->rename(new_names[i]))
            {
                cerr << "Error: Can't rename track '" << tl[i]->getName() << "'." << endl;
                return 1;
            }
        }
    
        return 0;
    }


    Edit: Bugfixes: CloseHandle() eingefügt, sort() eingefügt.

    Beitrag zuletzt geändert: 6.2.2011 17:22:21 von darkpandemic
  8. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!