Les gars, je suis en train de déplacer tous les fichiers se terminant par _DONE dans un autre dossier.
J'ai essayé
//take all files of main folder to folder model_RCCMrecTransfered
string rootFolderPath = @"F:/model_RCCMREC/";
string destinationPath = @"F:/model_RCCMrecTransfered/";
string filesToDelete = @"*_DONE.wav"; // Only delete WAV files ending by "_DONE" in their filenames
string[] fileList = System.IO.Directory.GetFiles(rootFolderPath, filesToDelete);
foreach (string file in fileList)
{
string fileToMove = rootFolderPath + file;
string moveTo = destinationPath + file;
//moving file
File.Move(fileToMove, moveTo);
Mais en exécutant ces codes, j'obtiens une erreur.
The given path's format is not supported.
Où me suis-je trompé ?
Vos barres obliques vont dans la mauvaise direction. Sur les fenêtres, vous devez utiliser des barres obliques. Par exemple.
string rootFolderPath = @"F:\model_RCCMREC\";
string destinationPath = @"F:\model_RCCMrecTransfered\";
Le tableau de noms de fichiers renvoyé par System.IO.Directory.GetFiles()
inclut leur chemin complet. (Voir http://msdn.Microsoft.com/en-us/library/07wt70x2.aspx ) Cela signifie que l'ajout des répertoires source et de destination à la valeur file
ne correspond pas à vos attentes. Vous obtiendrez des valeurs telles que F:\model_RCCMREC\F:\model_RCCMREC\something_DONE.wav
dans fileToMove
. Si vous définissez un point d'arrêt sur la ligne File.Move()
, vous pouvez consulter les valeurs que vous transmettez, ce qui peut aider à déboguer une situation comme celle-ci.
En bref, vous devez déterminer le chemin relatif de rootFolderPath
vers chaque fichier afin de déterminer le chemin de destination approprié. Examinez la classe System.IO.Path
( http://msdn.Microsoft.com/en-us/library/system.io.path.aspx ) pour connaître les méthodes qui vous aideront. (En particulier, vous devriez considérer Path.Combine()
plutôt que +
pour la construction de chemins.)
Je l'ai fait de cette façon:
if (Directory.Exists(directoryPath))
{
foreach (var file in new DirectoryInfo(directoryPath).GetFiles())
{
file.MoveTo($@"{newDirectoryPath}\{file.Name}");
}
}
le fichier est un type de classe FileInfo. Il a déjà une méthode appelée MoveTo () qui prend un chemin de destination.
S'il vous plaît essayez la fonction ci-dessous. Cela fonctionne bien.
Une fonction:
public static void DirectoryCopy(string strSource, string Copy_dest)
{
DirectoryInfo dirInfo = new DirectoryInfo(strSource);
DirectoryInfo[] directories = dirInfo.GetDirectories();
FileInfo[] files = dirInfo.GetFiles();
foreach (DirectoryInfo tempdir in directories)
{
Console.WriteLine(strSource + "/" +tempdir);
Directory.CreateDirectory(Copy_dest + "/" + tempdir.Name);// creating the Directory
var ext = System.IO.Path.GetExtension(tempdir.Name);
if (System.IO.Path.HasExtension(ext))
{
foreach (FileInfo tempfile in files)
{
tempfile.CopyTo(Path.Combine(strSource + "/" + tempfile.Name, Copy_dest + "/" + tempfile.Name));
}
}
DirectoryCopy(strSource + "/" + tempdir.Name, Copy_dest + "/" + tempdir.Name);
}
FileInfo[] files1 = dirInfo.GetFiles();
foreach (FileInfo tempfile in files1)
{
tempfile.CopyTo(Path.Combine(Copy_dest, tempfile.Name));
}
}