View Full Version : Lista files
Chiedo venia se è la sezione sbagliata o se è un argomento old...
esiste uno script, un programmino o altro che scrivano in un file di testo la lista dei files di una o più cartelle, ed eventualmente, nel caso di mp3, ne associno anche alcuni dettagli come titolo, autore, durata, ecc???
per quale sistema operativo ti serve? e quale linguaggio?
se per C++, ti posso postare il codice per la lettura/scrittura dei tag ID3.
Saluti
Grazie, saresti molto gentile, per c++ va benissimo, deve girare su win xp.
Ciao,
allora ti posto il codice per i tag ID3. Quindi deve girare su Win xp, se era per Linux ti potevo postare qualcosa anche sulla lista di file e cartelle. Comunque ci dovrebbe essere una qualche API (che ora mi sfugge).
<code>
#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;
bool ctrlTag(fstream&); // controlla se esiste la stringa TAG
void viewTag(fstream&); // visualizza le informazioni ID3
void setTag(fstream&); // imposta i tag ID3, anche se non esistono
typedef struct {
char title[31];
char artist[31];
char album[31];
char year[5];
char comment[29];
char track;
char genere;
} ID3; // struttura globale, accessibile da tutte le funzioni
int main(int argc, char* argv[])
{
char risp;
if (argc == 1 || argc > 2) {
cerr << "Error: Devi specificare un file .mp3!\n" << "Sintassi: ./id3 \"file1.mp3\"\n\n";
exit(EXIT_FAILURE);
}
fstream fio(argv[1], ios::binary | ios::in | ios::out);
if (!fio) {
cerr << "File non valido o non esistente!\n\n";
exit(EXIT_FAILURE);
}
// controllo se è presente la stringa TAG
if (!ctrlTag(fio)) cerr << "TAG ID3 mancanti o errore di posizionamento all'interno del file!\n\n";
else viewTag(fio);
cout << "Desideri inserire/modificare i tag ID3? [Si, No]: ";
cin >> setw(1) >> risp;
if (risp == 's' || risp == 'S') setTag(fio);
return EXIT_SUCCESS;
}
bool ctrlTag(fstream& file)
{
char buf[3];
file.seekp(-128, ios::end); // posizionamento 128 byte prima di EOF
file.read(buf, 3);
if (!strncmp(buf, "TAG", 3)) return true; // c'e' la stringa tag
else return false;
}
void viewTag(fstream& file)
{
char buf[129];
int i;
file.seekp(-128, ios::end);
file.read(buf, 128);
// titolo traccia, byte 3..32
cout << "\nTITOLO: ";
for (i = 3; i < 33; i++)
if ((buf[i] == '\0') || (buf[i] == ' ') && (buf[i+1] == ' ')) break;
else cout << buf[i];
// artista, byte 33..62
cout << "\nARTISTA: ";
for (i = 33; i < 63; i++)
if ((buf[i] == '\0') || (buf[i] == ' ') && (buf[i+1] == ' ')) break;
else cout << buf[i];
// album, byte 63..92
cout << "\nALBUM: ";
for (i = 63; i < 93; i++)
if ((buf[i] == '\0') || (buf[i] == ' ') && (buf[i+1] == ' ')) break;
else cout << buf[i];
// anno, byte 94..96
cout << "\nANNO: ";
for (i = 93; i < 97; i++)
if (!(buf[i] >= '1') && (!buf[i+1] <= '9') || (buf[i] == '\0')) break;
else cout << buf[i];
// commento, byte 94..96
cout << "\nCOMMENT: ";
for (i = 97; i < 126; i++)
if ((buf[i] == '\0') || (buf[i] == ' ') && (buf[i+1] == ' ')) break;
else cout << buf[i];
// traccia
cout << "\nTRACCIA: ";
cout << static_cast<int> (buf[126]);
// genere
cout << "\nGENERE: ";
cout << buf[127];
cout << "\n\n";
}
void setTag(fstream& file)
{
ID3 id3;
int size, i, traccia;
char tag[] = "TAG";
char buf[125], track[4];
if (!ctrlTag(file)) {
file.seekp(0, ios::end);
file.write(tag, 3);
} else file.seekp(-125, ios::end);
file.flush();
cin.getline(tag, 3);
cout << "\nTitolo: ";
cin.getline(id3.title, 31);
size = cin.gcount()-1;
for (i = size; i < 30; i++) id3.title[i] = static_cast<char> (NULL);
for (i = 0; i < 30; i++) buf[i] = id3.title[i];
cout << "\nArtista: ";
cin.getline(id3.artist, 31);
size = cin.gcount()-1;
for (i = size; i < 30; i++) id3.artist[i] = static_cast<char> (NULL);
for (i = 0; i < 30; i++) buf[30+i] = id3.artist[i];
cout << "\nAlbum: ";
cin.getline(id3.album, 31);
size = cin.gcount()-1;
for (i = size; i < 30; i++) id3.album[i] = static_cast<char> (NULL);
for (i = 0; i < 30; i++) buf[60+i] = id3.album[i];
cout << "\nAnno: ";
cin.getline(id3.year, 5);
if (cin.gcount()-1 < 4 || id3.year[0] == '\n') for (i = 0; i < 4; i++) id3.year[i] = static_cast<char> (NULL);
else for (i = 0; i < 4; i++) buf[90+i] = id3.year[i];
cout << "\nComment: ";
cin.getline(id3.comment, 29);
size = cin.gcount()-1;
for (i = size; i < 28; i++) id3.comment[i] = static_cast<char> (NULL);
for (i = 0; i < 28; i++) buf[94+i] = id3.comment[i];
cout << "\nTraccia: ";
cin.getline(track, 4);
traccia = atoi(track);
if (traccia >= 0 && traccia <= 127) id3.track = static_cast<char> (traccia);
else id3.track = static_cast<char> (NULL);
buf[122] = static_cast<char> (NULL);
buf[123] = id3.track;
buf[124] = static_cast<char> (NULL); // genere
file.write(buf, sizeof(buf));
}
</code>
Saluti
Scusa, per i midi è possibile la stessa cosa o simile?
Non lo so come e' la situazione per i midi.
scusate ragazzi...ma a cosa serve questo codice?cosa produce?e sopratutto...come posso far si che diventi un file utilizzabile per la sua applicazione?
Fenomeno85
30-11-2004, 22:38
Originariamente inviato da NeoNum6
scusate ragazzi...ma a cosa serve questo codice?cosa produce?e sopratutto...come posso far si che diventi un file utilizzabile per la sua applicazione?
intendi come farlo eseguire? se è questo devi compilarlo
MB_ICONQUESTION
come lo compilo?cosa mi serve?dove posso scaricare questo programma?
Fenomeno85
01-12-2004, 08:18
guarda nelle faq oppure cerca devcpp ;)
~§~ Sempre E Solo Lei ~§~
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.