Problema con un codice c++. Il metodo che tento compila correttamente ma l'eseguibile crasha

di il
1 risposte

Problema con un codice c++. Il metodo che tento compila correttamente ma l'eseguibile crasha

Buon giorno a tutti. Come faccio in c++ a elencare a video tutti i file e le sottocartelle presenti nella directory dove si trova l'eseguibile ma selezionare e riprodurre l'audio solo dei file che terminano con .wav? In teoria substr dovrebbe funzionare. Ma l'eseguibile arrivato a quel punto termina e si richiude. pe bello che per l'operazione contraria funziona. Il codice da me scritto fin'ora è il seguente
#include <iostream>
#include <string>
#include <Windows.h>
using namespace std;
#pragma comment(lib,"winmm.lib")
int main()
{
WIN32_FIND_DATA cartella;
HANDLE scanner;
scanner = FindFirstFile(L"\*.*", &cartella);
wstring nome = cartella.cFileName;
wcout << nome << endl; if(nome.substr(nome.size()-4,nome.size())== L".wav") { PlaySound(nome.c_str(), NULL, SND_FILENAME);}
while (FindNextFile(scanner, &cartella))
{
nome = cartella.cFileName;
wcout << nome << endl; if(nome.substr(nome.size()-4,nome.size())== L".wav") { PlaySound(nome.c_str(), NULL, SND_FILENAME); }
}
FindClose(scanner);
system("pause");
// in caso di wav da riprodurre non ce ne fossero per evitare che l'eseguibile si chiuda
}
Qualcuno mi sa dire dove sbaglio o se quest'istruzione può essere messa diversamente in modo che vada senza problemi?
Ho provato anche a sostituire .size()con .length() ma fa uguale. Che mi pare siano sinonimi.
Come accennavo in un altro mio codice faccio la cosa contraria. All'inizio uso FindFirstFile(L"\*.wav")
in modo che ignori tutti gli altri file e le sottocartelle
e successivamente wcout << nome.substr(0,nome.size()-4); PlaySound(nome.c_str(),NULL,SND_FILENAME);
e va perfettamente. Riproduce il brano musicale o quel che è ma scrive solo il titolo tagliando proprio l'estensione del file che tanto sappiamo che è .wav.
Grazie in anticipo attendo suggerimenti
e buona giornata a tutti

1 Risposte

  • Re: Problema con un codice c++. Il metodo che tento compila correttamente ma l'eseguibile crasha

    Prima di tutto devi postare il codice nel forum tra tag CODE (in futuro tienine conto).

    I problemi sono causati da

    scanner = FindFirstFile(L"\*.*", &cartella);

    che dovrebbe essere

    scanner = FindFirstFile(L"\\*.*", &cartella);

    e dal fatto che esegui sempre una sottrazione di 4 anche per nomi di file che sono meno lunghi ... rivedi questa parte.

    Se usi Visual Studio non hai bisogno di quella linea system("PAUSE") ... basta che avvii il programma con Ctrl-F5
Devi accedere o registrarti per scrivere nel forum
1 risposte