Je déplace des images (nom de fichier (1) .PNG, (2) .PNG et ainsi de suite) d'un répertoire à un autre. J'utilise le code suivant:
for (int i = 1; i < n; i++)
{
try
{
from = "E:\\vid\\(" + i + ").PNG";
to = "E:\\ConvertedFiles\\" + i + ".png";
File.Move(from, to); // Try to move
Console.WriteLine("Moved"); // Success
}
catch (IOException ex)
{
Console.WriteLine(ex); // Write error
}
}
Cependant, j'obtiens l'erreur suivante:
Une exception de première chance de type System.IO.FileNotFoundException
s'est produit dans mscorlib.dll
System.IO.FileNotFoundException: Could not find file 'E:\vid\(1).PNG'.
Je prévois également de renommer les fichiers afin que le nom du fichier converti soit 00001.png, 00002.png ... 00101 et ainsi de suite.
Je vous suggère d'utiliser '@'
Afin d'échapper aux barres obliques d'une manière plus lisible. Utilisez également Path.Combine(...)
pour concaténer les chemins et PadLeft
pour avoir vos noms de fichiers comme spécificités.
for (int i = 1; i < n; i++)
{
try
{
from = System.IO.Path.Combine(@"E:\vid\","(" + i.ToString() + ").PNG");
to = System.IO.Path.Combine(@"E:\ConvertedFiles\",i.ToString().PadLeft(6,'0') + ".png");
File.Move(from, to); // Try to move
Console.WriteLine("Moved"); // Success
}
catch (IOException ex)
{
Console.WriteLine(ex); // Write error
}
}
Pourquoi n'utilisez-vous pas quelque chose comme ça?
var folder = new DirectoryInfo(@"E:\vid\"));
if (folder.Exists)
{
var files = folder.GetFiles(".png");
files.toList().ForEach(f=>File.Move(from,to));
}
L'exception signifie que le fichier E:\vid(1).PNG
n'existe pas. Tu veux dire E:\vid1.PNG
?
Utilisation System.IO.Path
classe pour construire des chemins, c'est mieux que de concaténer des chaînes. Vous n'avez pas à vous soucier d'échapper aux barres obliques inverses.
i.ToString()
pourrait vous aider. Tu passes
from = "E:\\vid\\(" + i + ").PNG";
to = "E:\\ConvertedFiles\\" + i + ".png";
I comme entier et la concaténation ne fonctionne pas à cause de cela
et au lieu d'utiliser \\
, ajouter @
comme ça
from = @"E:\vid\(" + i + ").PNG";
Je viens de l'exécuter dans Visual Studio. Ça a marché.
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication2
{
class Program
{
static void Main()
{
int n = 3;
for (int i = 1; i < n; i++)
{
string from = "C:\\vid\\(" + i + ").PNG";
string to = "C:\\ConvertedFiles\\" + i + ".png";
{
try
{
File.Move(from, to); // Try to move
Console.WriteLine("Moved"); // Success
}
catch (System.IO.FileNotFoundException e)
{
Console.WriteLine(e); // Write error
}
}
}
}
}
}
Peut-être que lorsque vous déplaciez des fichiers dans le répertoire vid pour commencer le test, les fenêtres supprimaient la parenthèse. (1) .png est devenu 1.png ... J'ai eu une erreur de fichier introuvable à partir de ce phénomène ... sinon, votre code est solide. Ma version est presque identique.
var folder = new DirectoryInfo(sourcefolder);
if (folder.Exists)
{
var files = folder.GetFiles("*.png");
files.ToList().ForEach(f => File.Move(sourcefolder + f, newFolderName + f));
}
Je crois que cela vous aidera.