Перемещение файлов в C#
я перемещаю некоторые изображения (имя файла как (1).PNG, (2).PNG и так далее) из одного каталога в другой. Я использую следующий код:
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
}
}
тем не менее, я получаю следующую ошибку:
первый шанс исключение типа System.IO.FileNotFoundException
произошло в mscorlib.dll файлы
System.IO.FileNotFoundException: Could not find file 'E:vid(1).PNG'.
кроме того, я планирую переименовать файлы, чтобы преобразованное имя файла было 00001.png, 00002.формат PNG... 00101 и так далее.
6 ответов
Я предлагаю вам использовать '@'
чтобы избежать косых черт более читаемым способом. Также использовать Path.Combine(...)
для объединения путей и PadLeft
для того, чтобы ваши имена как свои особенности.
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
}
}
почему бы вам не использовать что-то вроде этого?
var folder = new DirectoryInfo(@"E:\vid\"));
if (folder.Exists)
{
var files = folder.GetFiles(".png");
files.toList().ForEach(f=>File.Move(from,to));
}
исключение означает, что файл E:\vid(1).PNG
не существует. Вы имеете в виду E:\vid1.PNG
?
использовать System.IO.Path
класс для построения путей, это лучше, чем конкатенация строк. Вам не придется беспокоиться о escapting обратные слеши.
Я только что запустил это в Visual Studio. Это сработало.
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
}
}
}
}
}
}
возможно, когда вы перемещали файлы в каталог vid, чтобы начать тест, windows сбрила скобки. (1).png стал 1.формат PNG... Я получил файл, который не нашел ошибку от этого явления... в противном случае, ваш код является твердой. Моя версия почти идентична.
i.ToString()
может помочь вам. Вы проходите
from = "E:\vid\(" + i + ").PNG";
to = "E:\ConvertedFiles\" + i + ".png";
I как целое число и конкатенация не работает из-за этого
и вместо использования \
добавьте @
такой
from = @"E:\vid\(" + i + ").PNG";
var folder = new DirectoryInfo(sourcefolder);
if (folder.Exists)
{
var files = folder.GetFiles("*.png");
files.ToList().ForEach(f => File.Move(sourcefolder + f, newFolderName + f));
}
Я считаю, что это поможет.