あるディレクトリから別のディレクトリにいくつかの画像((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
}
}
ただし、次のエラーが表示されます。
Mscorlib.dllでタイプSystem.IO.FileNotFoundException
の最初のチャンス例外が発生しました
System.IO.FileNotFoundException: Could not find file 'E:\vid\(1).PNG'.
また、変換されたファイル名が00001.png、00002.png ... 00101などになるように、ファイルの名前を変更する予定です。
スラッシュをより読みやすい方法でエスケープするには、_'@'
_を使用することをお勧めします。パスを連結するには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
パスを構築するためのクラス。文字列を連結するよりも優れています。バックスラッシュをエスケープすることを心配する必要はありません。
i.ToString()
あなたを助けるかもしれません。あなたが通過しています
from = "E:\\vid\\(" + i + ").PNG";
to = "E:\\ConvertedFiles\\" + i + ".png";
私は整数として、連結はそれのために機能しません
そして\\
を使用する代わりに、@
をこのように追加します
from = @"E:\vid\(" + i + ").PNG";
これを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ディレクトリに移動していたとき、ウィンドウは括弧から削り取られました。 (1).pngは1.pngになりました...その現象からファイルが見つかりませんというエラーが発生しました...それ以外の場合、コードは強固です。私のバージョンはほとんど同じです。
var folder = new DirectoryInfo(sourcefolder);
if (folder.Exists)
{
var files = folder.GetFiles("*.png");
files.ToList().ForEach(f => File.Move(sourcefolder + f, newFolderName + f));
}
これが役立つと思います。