2012-05-04 4 views
0

J'ai un script MATLAB qui doit écrire des fichiers temporaires sur le disque, puis supprimer ces fichiers lorsque j'en ai fini avec eux. Il est important que je supprime les fichiers moi-même (plutôt que de les laisser s'accumuler dans le répertoire temp) car le code en question est dans une boucle qui s'exécute plusieurs fois. Si les fichiers ne sont pas supprimés rapidement, le script va rapidement engloutir de grandes quantités d'espace disque. Je pensais que l'extrait de code ci-dessous fonctionnerait, et il le fait quand je l'exécute tout seul. Pour une raison quelconque, cependant, l'extrait échoue lorsque je l'inclue dans mon script plus grand. Les fichiers temporaires ne sont pas supprimés et encombrent le répertoire temporaire.Comment supprimer des fichiers temporaires dans MATLAB

% create temporary file 
    myTmpFile = [tempname '.wav']; 
    fs = 32000; 
    wavwrite(zeros(fs,1),fs,myTmpFile); 


    % use the file here 


    % delete the file when we're done 
    prevState = recycle('off'); % turn recycle off to permanently delete files 
    delete(myTmpFile) 
    recycle(prevState);   % restore the state of recycle 

Est-ce que quelqu'un a une idée de ce que je fais mal? Je cours MATLAB 7.10.0 sur OS X 10.7.3.

  • EDIT *

I figured it out. Voir ma réponse ci-dessous.

+1

Vous pouvez être intéressé par la définition d'un objet 'onCleanup' afin que le fichier soit supprimé même si la fonction se ferme en raison d'une erreur. – Jonas

Répondre

1

Je l'ai compris. Il s'avère que le problème n'était pas dans l'extrait ci-dessus; c'était dans une section complètement différente de mon code. J'écrivais des fichiers temporaires ailleurs et j'avais oublié de les supprimer.

Bottom line: il n'y a absolument rien de mal avec l'extrait ci-dessus. tempname, recycle et delete sont des fonctions parfaitement bonnes pour créer et détruire des fichiers temporaires.

1

Utilisez-vous un nom de fichier relatif ou absolu? Si vous modifiez le dossier actuel avec cd à l'intérieur de la boucle ou si l'une des fonctions que votre code appelle appelle cd sans revenir au dossier d'origine par la suite, les noms de fichiers relatifs ne fonctionneront pas. Vous pouvez vérifier le dossier actuel avec pwd. Solutions possibles: 1. Eviter cd. 2. Utilisez des noms de fichiers absolus.

+0

hi nrz - Je faisais tout ça déjà, mais c'est toujours un bon conseil, alors merci de l'avoir partagé! –

2

Vous devriez vérifier les fonctions tempdir et tmpname qui font partie de MATLAB. Ils sont conçus pour fournir absolus chemins aux noms de fichiers dans un répertoire que vous êtes garanti pour avoir accès en écriture. Voir la documentation pour les deux fonctions au the MathWorks web site. En fonction des problèmes que vous voyez, je soupçonne (comme le fait nrz) que vous écrivez vos fichiers temporaires dans tout ce qui se trouve être le répertoire courant de MATLAB. Non seulement cela vous fera perdre la trace des fichiers à des fins de suppression plus tard, mais un jour vous finirez dans un répertoire en lecture seule et sera complètement pas de chance!

+0

Salut Bob - whoops, j'ai en fait fait une faute de frappe quand j'ai copié cet extrait dans StackOverflow. 'tempfile' aurait dû être' tempname'. (J'ai édité la question.) Donc, en fait, j'utilisais * les fonctions standards de MATLAB pour générer les fichiers temporaires, et je recevais toujours le comportement décrit. J'ai compris le problème cependant - il s'est avéré être sans rapport avec l'extrait ci-dessus. En tout cas, merci pour la réponse! –

Questions connexes