2010-10-04 23 views
1

Quelqu'un peut-il me dire ce qui va se passer dans ce code lorsqu'une erreur est rencontrée? Idéalement, il devrait continuer l'instruction foreach jusqu'à ce qu'il arrive au dernier enregistrement, mais je suspecte qu'il s'arrête au milieu de l'opération parce que lorsque je vérifie le nombre de fichiers déplacés, il est éteint par 225. S'il s'arrête réellement à cause d'une erreur , que puis-je faire pour le faire continuer la boucle?Création d'une nouvelle structure de répertoire et déplacement de fichiers en utilisant ASP.NET et C#

Je crée un nouveau gestionnaire de téléchargement pour notre logiciel et j'ai besoin de nettoyer les anciens fichiers. Il ya environ 715 fichiers orphelins égalant environ 750 Mo après un an et demi d'utilisation parce que les développeurs d'origine n'ont pas écrit le code pour remplacer correctement les anciens fichiers quand un nouveau a été téléchargé. Ils ont également enregistré les fichiers dans un seul répertoire. Je ne peux pas supporter cela donc je déplace tous les fichiers dans une structure - Nom du navire - ServiceRequesetID - fichiers téléchargés pour ce service. Je donne également aux utilisateurs un affichage en grille pour voir et supprimer les fichiers dont ils n'ont plus besoin lorsqu'ils travaillent sur le service.

Button1_Click protégé vide (expéditeur d'objet, EventArgs e) {

GridViewRow[] rowArray = new GridViewRow[gv_Files.Rows.Count]; 
    gv_Files.Rows.CopyTo(rowArray, 0); 

    int i = -1; 

    foreach(GridViewRow row in rowArray) 
    { 
     i++; 
     string _serviceRequestID = ((Label)gv_Files.Rows[row.RowIndex].FindControl("lbl_SRID")).Text; 
     string _vesselName = ((Label)gv_Files.Rows[row.RowIndex].FindControl("lbl_VesselID")).Text; 
     string _uploadDIR = Server.MapPath("uploadedFiles"); 
     string _vesselDIR = Server.MapPath("uploadedFiles" + "\\" + _vesselName); 
     string _fileName = ((Label)gv_Files.Rows[row.RowIndex].FindControl("lbl_FileName")).Text; 
     DirectoryInfo dInfo = new DirectoryInfo(_uploadDIR); 
     DirectoryInfo dVessel = new DirectoryInfo(_vesselDIR); 
     DirectoryInfo dSRID = new DirectoryInfo(_serviceRequestID); 
     dInfo.CreateSubdirectory(_vesselName); 
     dVessel.CreateSubdirectory(_serviceRequestID); 

     string _originalFile = _uploadDIR + "\\" + _fileName; 
     string _fileFullPath = Path.Combine(Server.MapPath("uploadedFiles/" + _vesselName + "/" + _serviceRequestID + "/"), _fileName); 
     FileInfo NewFile = new FileInfo(_fileFullPath); 
     string _fileUploadPath = _vesselName + "/" + _serviceRequestID + "/" + _fileName; 
     string sourceFile = _originalFile; 
     FileInfo _source = new FileInfo(sourceFile); 
     string destinationFile = _fileFullPath; 

      try 
      { 
       { 
        File.Move(sourceFile, destinationFile); 
        movefiles.InsertNewUploadPath(Convert.ToDecimal(_serviceRequestID), 1, _fileUploadPath); 
       } 
      } 
      catch (Exception ex) 
      { 
       CreateLogFiles Err = new CreateLogFiles(); 
       Err.ErrorLog(Server.MapPath("Logs/ErrorLog"), ex.Message); 

      } 
    } 

    _utility.MessageBox("Completed processing files."); 
} 
+1

Veuillez corriger votre formatage - c'est horrible. Nous utilisons [MarkDown] (http://stackoverflow.com/editing-help) ici, pas le HTML complet. Ajoutez juste 4 espaces avant chaque ligne de code. – Oded

+0

Je suis en train de jouer avec ça. J'espère que ça a l'air un peu mieux. Vous êtes rapide ... – Infotech

Répondre

0

Tant que l'erreur rencontrée se produit au sein de la clause catch try, le code continuera à exécuter dans la boucle foreach. Cependant, si l'erreur survient en dehors de la tentative try, la fonction se ferme et génère une erreur. Combien de fichiers votre journal d'erreurs signale-t-il?

+0

J'ai finalement eu une bonne lecture sur le journal. J'ai décidé de déplacer d'abord les demandes de service, de déplacer le journal créé par ce processus, puis de déplacer les factures. Il y a 224 erreurs de fichier introuvable, ce qui signifie qu'elles sont manquantes dans le répertoire, même si personne n'a accès à ce dossier en dehors du serveur. – Infotech

+0

Les utilisateurs semblent télécharger le même fichier pour la facture et la demande de service parfois. Toutefois, le code de téléchargement d'origine inclut un générateur de numérotation automatique qui ajoute le numéro généré au nom de fichier. Il semble que ce ne soit pas le cas dans certains cas. Je suppose que je vais devoir vérifier un peu plus près pour voir ce qui se passe. Cela pourrait être un problème difficile. – Infotech

+0

J'ai tout fait fonctionner comme il se doit - zéro erreur dans le journal, donc je suis à peu près certain qu'il copie tous les fichiers qu'il peut. Cependant, je suis toujours en train de faire une différence dans le nombre de fichiers que je devrais avoir. En fait, c'est le même nombre que je recevais hier. J'ai créé un gridview pour voir les noms de fichiers dans le répertoire. Existe-t-il un moyen facile de comparer ces fichiers avec les noms de fichiers enregistrés dans la base de données? – Infotech