2014-05-05 3 views
0

ci-dessous xml est à des fins de sortie d'image, il n'y a aucun problème sur l'image de sortie en utilisant le code XML ci-dessous pour moi.si File.Exists & générer un numéro de séquence

public static void TIF(Document dc, SortedList<string, object> dcIndexes) 
{ 
    string str1 = dcIndexes["Document,name"].ToString(); 
    string str2 = dcIndexes["Document,age"].ToString(); 
    string str5 = dcIndexes["Document,status"].ToString(); 
    string str3 = Path.Combine(Config.OutputFolder, DateTime.Now.ToString("yyyyMMdd")); 
    if (!Directory.Exists(str3)) 
    Directory.CreateDirectory(str3); 
    string str4 = Path.Combine(str3, str1 + "_" + str2 + "_" + str5 + ".tif"); 
    DocumentHistory dh = (DocumentHistory) null; 
    string sourceFileName = ServiceES.FromSE(dc, out dh); 
    if (File.Exists(str4)) 
    File.Delete(str4); 
    File.Move(sourceFileName, str4); 
    PTrace.LogInformation("{0} - TIF - {1}", (object) dc.Title, (object) str4); 
} 

le chemin de sortie est maintenant \YYYYMMDD\NAME_AGE_STATUS.tif si « name » est vide, le nom de l'image deviendra: \YYYYMMDD\_AGE_STATUS.tif la question i ayant maintenant, il y a même âge et statut au sein de la base de données. l'image se contentera de remplacer la première image suivie par la deuxième et la troisième image, ne finira que 1 image.

Puis-je savoir comment ajouter un numéro courant? exemple: \YYYYMMDD\_AGE_STATUS.tif (first image), \YYYYMMDD\_AGE_STATUS_001.tif (second image) suivi par \YYYYMMDD\_AGE_STATUS_002.tif (third image). if can remove the "_" front of AGE will look better. example: \ AAAAMMJJ \ AGE_STATUS_002.tif` son code semble que ci-dessous ne permet pas:

if (File.Exists(str4)) 
    File.Delete(str4); 

comment puis-je ajouter un numéro de séquence 001002003 derrière si son double TIF? 10 du nom de fichier est maintenant dupliqué.

_23_Single 
_23_Single 
_23_Single 
_23_Single 
_23_Single 
_23_Single 
_23_Single 
_23_Single 
_23_Single 
_23_Single 

pour devenir:

_23_Single 
    _23_Single_001 
    _23_Single_002 
    _23_Single_003 
    _23_Single_004 
    _23_Single_005 
    _23_Single_006 
    _23_Single_007 
    _23_Single_008 
    _23_Single_009 

ou pour devenir:

23_Single 
23_Single_001 
23_Single_002 
23_Single_003 
23_Single_004 
23_Single_005 
23_Single_006 
23_Single_007 
23_Single_008 
23_Single_009 
+1

J'ai modifié votre titre. S'il vous plaît voir, "[Les questions devraient inclure" tags "dans leurs titres?] (Http://meta.stackoverflow.com/questions/19190/)", où le consensus est "non, ils ne devraient pas". –

+1

Veuillez ne pas appeler vos variables 'str1' à' str15'. Une dénomination correcte des variables facilite la compréhension du code. 'str1' pourrait s'appeler' docName' par exemple. – Tomalak

+0

merci pour la recommandation – user2523188

Répondre

2

Vous aurez à créez le nom de fichier, vérifiez-le, puis modifiez-le si le fichier existe. Par exemple:

public static void TIF(Document dc, SortedList<string, object> dcIndexes) 
{ 
    string str1 = dcIndexes["Document,name"].ToString(); 
    string str2 = dcIndexes["Document,age"].ToString(); 
    string str5 = dcIndexes["Document,status"].ToString(); 
    string str3 = Path.Combine(Config.OutputFolder, DateTime.Now.ToString("yyyyMMdd")); 
    if (!Directory.Exists(str3)) 
     Directory.CreateDirectory(str3); 

    // ******** 
    // find first available file name 
    bool done = false; 
    int sequence = 0; 
    string str4; 
    string baseName = str1 + "_" + str2 + "_" + str5; 
    do 
    { 
     // change here *** 
     string fname = baseName; 
     if (sequence > 0) 
      fname = fname + "_" + sequence.ToString(); 
     // end of change *** 

     str4 = Path.Combine(str3, fname + ".tif"); 
     if (File.Exists(str4)) 
      ++sequence; 
     else 
      done = true; 
    } while (!done); 

    // str4 now contains the file name 
    // ******** 

    DocumentHistory dh = (DocumentHistory) null; 
    string sourceFileName = ServiceES.FromSE(dc, out dh); 
    if (File.Exists(str4)) 
     File.Delete(str4); 
    File.Move(sourceFileName, str4); 
    PTrace.LogInformation("{0} - TIF - {1}", (object) dc.Title, (object) str4); 
} 
+0

Salut, pouvez-vous modifier directement à partir de mon code et je peux le remplacer à ma place. parce que je n'ai aucune idée où devrais-je coller votre code dans quelle ligne. – user2523188

+0

@ user2523188: J'ai mis à jour ma réponse pour montrer où insérer ce code. Notez également que votre code serait beaucoup plus facile à comprendre si vous utilisiez des noms de variables significatifs plutôt que "str1", "str3", etc. –

+0

son fonctionnement parfait !! mais si le fichier n'existe pas, tout le nom du fichier est également nommé _0? Par exemple: name_age_status_0 – user2523188

0

Je voudrais simplement compter, combien de fichiers existent déjà

string fileName = // your file name 
int filesWithThisName = 1; 
while(File.Exists(fileName)) 
{ 
    fileName = Path.Combine(str3, str1 + "_" + str2 + "_" + str5 + "_" + i.ToString("D3") + ".tif"); 
    i++; 
} 
// save file 
+0

Vous pouvez le faire en appelant 'Directory.GetFiles', bien que cela vous donne tous les fichiers qui existent, même s'il y a un espace. Autrement dit, si «x_001» et «x_003» existent, mais pas «x_002», votre code s'arrêtera à 2 et «Directory.GetFiles» vous donnera tous les fichiers. –

Questions connexes