21

一部の画像 (ファイル名は(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.FileNotFoundExceptionmscorlib.dllで、タイプの初回例外が発生しました

System.IO.FileNotFoundException: Could not find file 'E:\vid\(1).PNG'.

00001.pngまた、変換後のファイル名が、00002.png、 …となるようにファイル名を変更する予定です00101.png

4

6 に答える 6

24

'@'より読みやすい方法でスラッシュをエスケープするために使用することをお勧めします。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
    }
}
于 2012-11-29T09:00:26.087 に答える
3

こんなもの使ってみませんか?

var folder = new DirectoryInfo(@"E:\vid\"));

if (folder.Exists)
{
    var files = folder.GetFiles(".png");
    files.toList().ForEach(f=>File.Move(from,to));
}
于 2012-11-29T09:07:05.160 に答える
1

例外は、ファイルE:\vid(1).PNGが存在しないことを意味します。ということE:\vid1.PNGですか?

パスを構築するためにクラスを使用System.IO.Pathします。文字列を連結するよりも優れています。バックスラッシュのエスケープについて心配する必要はありません。

于 2012-11-29T08:57:19.683 に答える
1
i.ToString()

あなたを助けるかもしれません。あなたは通り過ぎています

from = "E:\\vid\\(" + i + ").PNG";
to = "E:\\ConvertedFiles\\" + i + ".png";

I as integer と連結が機能しないため、
を使用する代わりに、次のよう\\に追加します@

from = @"E:\vid\(" + i + ").PNG";
于 2012-11-29T08:57:46.877 に答える
1

これを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 になりました... その現象からファイルが見つかりませんというエラーが発生しました... それ以外の場合は、コードはしっかりしています。私のバージョンはほぼ同じです。

于 2012-11-29T10:21:06.187 に答える
0
var folder = new DirectoryInfo(sourcefolder);

if (folder.Exists)
{
    var files = folder.GetFiles("*.png");
    files.ToList().ForEach(f => File.Move(sourcefolder + f, newFolderName + f));
}

これが役立つと思います。

于 2014-09-15T18:07:59.923 に答える