2011-04-25 2 views
2

Je dois montrer un message à l'utilisateur quand un fichier existe, qui affiche le message "les fichiers existent ... voulez-vous l'écraser ??" Si l'utilisateur écrit "Y" le processus commence et fait normal ... le problème est comment peut-il arrêter ?? J'essaye avec ceci, mais ne fonctionne pas ...User Option Oui/Non

Comment est-ce que je peux faire ceci?

+1

veuillez ne pas annuler les modifications des utilisateurs. Ils essaient d'améliorer la mise en forme du code pour rendre la question plus lisible et donc responsable. – ChrisF

+3

Pourquoi utilisez-vous la boucle while? Et pourquoi lancez-vous une exception si l'utilisateur répond non et puis remplacez par null? – esrange

+0

@esrange il semble qu'il a signifié à ReadLine() jusqu'à ce qu'une option valide ait été entrée, puis a rompu avec la boucle en définissant l'écrasement sur null. @ale pause; est le moyen de sortir de la boucle. – adorablepuppy

Répondre

3
if (File.Exists(binaryFilePath)) 
{ 
    while (true) 
    { 
    Program.DisplayMessage("The file: " + binaryFileName + " already exist. Do you want to overwrite it? Y/N"); 
    string overwrite = Console.ReadLine(); 
    if (overwrite.ToUpper().Equals("Y")) 
    { 
     WriteBinaryFile(frameCodes, binaryFilePath); 
     break; 
    } 
    else if (overwrite.ToUpper().Equals("N")) 
    { 
     Console.WriteLine("Aborted by user."); 
     break; 
    } 
    else 
    { 
     Program.DisplayMessage("!!Please Select a Valid Option!!"); 
     overwrite = Console.ReadLine(); 
     continue; // not needed - for educational use only ;) 
    } 
    } 
} 

Essayez cela et apprenez les bases (conditions, boucles, anglais, ...). Ensuite, vous pouvez revenir et vous demander pourquoi jeter une exception (en particulier celui-là) est faux dans votre cas;)

+0

cette application est en console, j'ai besoin d'utiliser pour EqualsIgnoreCase ?? n'identifie pas ... – ale

+2

Ce code devrait fonctionner correctement dans une application de console (bien que ataman, je pense que c'est 'ToUpper()', pas 'toUpper()') ... La conversion en majuscule gère les différences de casse; vous n'avez pas besoin de considérer un cas avec cette approche. D'autres approches que vous pouvez utiliser pour la comparaison de chaînes insensible à la casse incluent: overwrite.Equals ("Y", StringComparison.CurrentCultureIgnoreCase) ',' overwrite.Equals ("Y", StringComparison.InvariantCultureIgnoreCase) ',' string.Equals (écraser, "Y", StringComparison.CurrentCultureIgnoreCase); 'ou simplement' string.Equals (écraser, "Y", true); ' –

+0

Oui, ToUpper et Equals sont tous les deux en majuscule, je mélange toujours ça quand je saute entre java et C#. – atamanroman

0

Essayez d'utiliser break; pour sortir de la boucle (également utiliser if-else, si plutôt que si, si ..)

if (File.Exists(binaryFilePath)) 
{ 


    while (true) 
    { 
     Program.DisplayMessage("The file: " + binaryFileName + " exist. You want to overwrite it? Y/N"); 
     string overwrite = Console.ReadLine(); 
     if (overwrite.ToUpper() == "Y") 
     { 
      WriteBinaryFile(frameCodes, binaryFilePath); 
      break; 

     } 
     else if (overwrite.ToUpper() == "N") 
     { 
      throw new IOException(); 
      overwrite = null; 
      break; 
     } 
     else if (overwrite.ToUpper() != "Y" && overwrite.ToUpper() != "N") 
     { 
      Program.DisplayMessage("!!Please Select a Valid Option!!"); 
      overwrite = Console.ReadLine(); 
     } 
    } 
} 

bien que le break; après "N" est inutile, mais j'espère que vous êtes gérer l'exception que vous lancez ailleurs.

+2

Vous n'avez vraiment pas besoin du troisième 'if'. Les elses s'en occupent déjà. Vous n'avez probablement besoin d'aucune des deux lignes après 'throw'; ils seraient inaccessibles de toute façon. – Timwi

0

Je crois que la lecture du choix de l'utilisateur doit être déléguée à une autre méthode. Comme ceci:

static void Main(string[] args) 
     { 
      //... 

      if (File.Exists(binaryFilePath)) 
      { 
       if(ReadBool("The file: " + binaryFileName + " exist. You want to overwrite it? Y/N")) 
        WriteBinaryFile(frameCodes, binaryFilePath); 
       else 
        throw new IOException(); 
      } 
     } 

static bool ReadBool(String question) 
     { 
      while (true) 
      { 
       Console.WriteLine(question); 
       String r = (Console.ReadLine() ?? "").ToLower(); 
       if (r == "y") 
        return true; 
       if (r == "n") 
        return false; 
       Console.WriteLine("!!Please Select a Valid Option!!"); 
      } 
     }