2010-10-04 8 views
0

J'ai été chargé d'écrire un programme C# qui est censé effectuer ce qui suit:Problèmes avec les tableaux C#

Vous entrez le répertoire cible. Le programme recherche si le répertoire existe. Si ce n'est pas le cas, demandez une nouvelle entrée. Sinon, continuez. Le programme obtient des fichiers d'un certain type (il s'agit de fichiers .epl, mais pour cela, je n'utilise que des fichiers .txt) et les ajoute au tableau FilePathsA []. Une liste de tableaux est créée à partir de FilePathsA.

Si le nombre de la liste est 0; Obtenir le fichier. (il n'y aura jamais qu'un seul fichier de ce type dans ce dossier). Si le nombre de la liste est 1; Prenez la chaîne filepath, créez une instance de lecteur de texte. Lire le texte du fichier, ajouter le texte, envoyer le texte à une imprimante.

Fermer instance de lecteur de texte. Supprimez le fichier qui vient d'être imprimé. Efface la liste de matrices.

Répétez le processus de fichier get jusqu'à ce qu'un nouveau fichier est trouvé, impression/supprimer que répéter le cycle. Il est destiné à rester actif jusqu'à la fermeture du programme.

Obtenir le fichier initial fonctionne très bien; il imprime puis supprime le fichier du dossier. Cependant, mon problème est avec la récursivité dans la perpétuation de ce cycle. Une fois qu'un fichier est effacé, il va continuellement "chercher" mais pas réellement suivre. Le débogage semble indiquer qu'il n'obtient pas le nouveau fichier du tout.

Je ne sais pas comment s'y prendre pour résoudre ce, voici l'extrait de code: http://pastebin.com/RNn7QqXJ

Toute aide appréciée!

+0

Il est un ami qui veut des étiquettes de codes à barres imprimé avec son imprimante Zebra. Plutôt que de faire envoyer le fichier à chaque fois, il préfère que ce processus soit automatique. Je pensais que ce serait un bon exercice d'apprentissage, mais j'ai été perplexe pendant un moment. – Nemekh

+2

Vous devriez affiner votre question à une section spécifique de votre code, et le rendre très spécifique. C'est un peu trop vague ... Quelle est la question ici? –

+2

Cela aiderait si vous fournissiez vos efforts jusqu'ici et avec quoi vous vous battez, alors nous pouvons vous aider, plutôt que de demander aux gens de faire votre travail pour vous. – thecoop

Répondre

3

Je pense que vous devriez mettre

string[] filePathsA; 
ArrayList filePaths; 

en dehors de votre boucle

et

filePathsA = Directory.GetFiles(@dir, "*.txt"); 
filePaths = new ArrayList(filePathsA); 

dans votre bloc do ... while dans son début.

+1

Ne devrait-il pas être 'List ' plutôt que 'ArrayList' ...? – thecoop

+1

@thecoop Oui, mais c'est son code Il est responsable de l'utilisation des génériques: –

+0

En procédant ainsi, les erreurs de clause while en tant qu'arrayylist FilePaths n'existent pas dans ce contexte. – Nemekh

3

Pourquoi ne pas:

while(!shutdown) 
{ 
    foreach(string filename in Directory.GetFiles(@dir, "*.txt") 
    { 
     printTheFile(filename); 
     File.Remove(filename); 
     Thread.Sleep(3000); //if you need to sleep 
    } 
    Thread.Sleep(3000); //if you need to sleep 
} 

Ou mieux encore mettre en place une création de fichiers System.IO.FileSystemWatcher et gérer.

+0

Je n'avais pas pensé à ça, surtout par manque de savoir que tu pouvais. Cela semble beaucoup plus simple/propre. – Nemekh