Procédure récursive et sortie anticipée, problème ?
Bonjour,
Voici le code de la procédure récursive :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
// copie du dossier
private void CopyDir(string sourceDir, string destDir,int TID)
{
DirectoryInfo dir = new DirectoryInfo(sourceDir); if (dir.Exists)
{
try
{
string realDestDir;
if (dir.Root.Name != dir.Name)
{
realDestDir = Path.Combine(destDir, dir.Name);
if (!Directory.Exists(realDestDir))
Directory.CreateDirectory(realDestDir);
}
else realDestDir = destDir;
foreach (string d in Directory.GetDirectories(sourceDir))
{
// if ((new DirectoryInfo(d).Attributes & FileAttributes.System) != FileAttributes.System)
if (!Tcontinue[TID]) break;
CopyDir(d, realDestDir, TID);
}
if (!Tcontinue[TID]) return;
foreach (string file in Directory.GetFiles(sourceDir))
{
if (!Tcontinue[TID]) break;
string fileNameDest = Path.Combine(realDestDir, Path.GetFileName(file));
CopyFile(file, fileNameDest, TID);
}
}
catch
{
// on stocke l'erreur
if (errs[TID].Count < 50)
errs[TID].Add(DateTime.Now.ToLongTimeString() + " : [" + appli_saved[TID] + "] Le répertoire \"" + sourceDir + "\" n'est plus accessible.");
else
{
errs[TID].Add(DateTime.Now.ToLongTimeString() + " : [" + appli_saved[TID] + "] 50 erreurs sont apparues, arret de la sauvegarde " + appli_saved[TID]);
Tcontinue[TID] = false;
return;
}
}
}
else
errs[TID].Add(DateTime.Now.ToLongTimeString() + " : [" + appli_saved[TID] + "] Le répertoire \"" + sourceDir + "\" est introuvable.");
} |
Mon programme copie via plusieurs threads des dossiers volumineux.
Aussi pour controler l'annulation de chaque thread, j'ai un tableau de boolean (Tcontinue[]) qui normalement devrait me permettre d'annuler en cours de copie un thread. Pour cela je souhaite controler dans la procédure "CopyDir" si la valeur contenue dans Tcontinue est true ou false, si false alors il faut sortir de la procédure et c'est à ce moment là que j'ai le problème, je n'arrive pas à sortir de la procédure, une idée ? Est-ce dû à la récursivité ?
Ps : TID est l'identifiant du thread en cours.
Merci