Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
   let mut iterator_folder = fs::read_dir(target.clone());             
                ...
                'parcourir:  for fichier in iterator_folder.as_mut().unwrap()
		{
			// on ne traite que les répertoires et les fichiers, pas les liens symboliques
			if fichier.as_ref().unwrap().file_type().unwrap().is_dir()
			{
				...
			}
			else
			{
				if String::from(fichier.as_ref().unwrap().file_name().to_str().unwrap()).ends_with(SUFFIX) // SUFFIX équivaut à ".mp4"
				{
					// Traitement des noms de joueurs contenant des caractères interdits dans les noms de fichiers
					// TODO: trouver une solution
 
					if String::from(fichier.as_ref().unwrap().file_name().to_str().unwrap()).contains(QUESTION) // QUESTION équivaut à "(qm)"
					{
						println!("[DEBUG 1] {:?}",fichier); // (qm)test(qm).mp4
						let processedfilename = fichier.as_ref().unwrap().file_name().to_str().unwrap().replace(QUESTION,"?");
						let result = rename(fichier.as_ref().unwrap().file_name(),processedfilename);
						if result.is_err()
						{
							eprintln!("rename ERROR -> {}",result.unwrap_err());
						}
						println!("[DEBUG 2] {:?}",fichier); // toujours (qm)test(qm).mp4 mais sur le système de fichiers c'est ?test?.mp4
					}
				...
		} // end for
Je pensais avec ces instructions renommer un fichier...
Effectivement sur le disque dur le fichier est bien renommé... le soucis dans cette boucle c'est que à la suite de celle-ci comme "fichier" n'a pas vu son champs "filename" modifié, j'ai une erreur "file not found"
lorsque j'essaye d'accéder au fichier renommé...

Je ne vois pas du tout comment faire pour associer "processedfilename" au champs retourné par file_name()...
Au pire je pourrais "court-circuiter l'iterator" en essayant de relire les fichiers contenus dans le répertoire que je suis en train de parcourir, au départ je pensais faire un "rewind" d'un élément mais je ne sais pas comment faire cela avec un iterator...

iterator_folder -= 1 ? // mon rustrover n'a pas l'air fort content...

PS: fichier n'est pas mutable mais il n'existe pas de "setter" dans ses "traits" je ne vois pas du tout comment procéder pour que DEBUG 1 et DEBUG 2 indiquent quelque chose de cohérent...

[EDIT]

iterator_folder = fs::read_dir(target.clone()); // ça ne marche pas
(cannot assign to `iterator_folder` because it is borrowed)
...et comme je ne comprends absolument rien au concept d'emprunt là je bouquine et je galère...