web-dev-qa-db-ja.com

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
    }
}

ただし、次のエラーが表示されます。

Mscorlib.dllでタイプSystem.IO.FileNotFoundExceptionの最初のチャンス例外が発生しました

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

また、変換されたファイル名が00001.png、00002.png ... 00101などになるように、ファイルの名前を変更する予定です。

18
MKS

スラッシュをより読みやすい方法でエスケープするには、_'@'_を使用することをお勧めします。パスを連結するには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
    }
}
_
22
Tobia Zambon

このようなものを使用してみませんか?

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

if (folder.Exists)
{
    var files = folder.GetFiles(".png");
    files.toList().ForEach(f=>File.Move(from,to));
}
2
Keysharpener

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

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

1
Jakub Konecki
i.ToString()

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

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

私は整数として、連結はそれのために機能しません
そして\\を使用する代わりに、@をこのように追加します

from = @"E:\vid\(" + i + ").PNG";
1
Gustav Klimt

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

1
BrianK
var folder = new DirectoryInfo(sourcefolder);

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

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

0
madhan seeman