0

エラーは発生しませんが、拡張子は変更されていません。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;


namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string filename;
            string[] filePaths = Directory.GetFiles(@"c:\Users\Desktop\test\");
            Console.WriteLine("Directory consists of " + filePaths.Length + " files.");
            foreach(string myfile in filePaths)
                filename = Path.ChangeExtension(myfile, ".txt");
            Console.ReadLine();
        }
    }
}
4

5 に答える 5

14

Path.ChangeExtension新しい拡張子の文字列のみを返し、ファイル自体の名前は変更しません。

System.IO.File.Move(oldName, newName)次のように、実際のファイルの名前を変更するために使用する必要があります。

foreach (string myfile in filePaths)
{
    filename = Path.ChangeExtension(myfile, ".txt");
    System.IO.File.Move(myfile, filename);
}
于 2013-03-25T11:37:35.923 に答える
2

ファイルの拡張子を変更したい場合は、を呼び出しますFile.Move()

于 2013-03-25T11:37:23.527 に答える
1

これはパスの拡張子のみを変更し、ファイルの拡張子は変更しません。

理由:ChangeExtensionが呼び出されるためPath.ChangeExtension。ファイルには、System.IO. FileClassとそのメソッドを使用します。

于 2013-03-25T11:36:22.380 に答える
1

メソッドChangeExtensionのドキュメントには、次のように記載されています。

パス文字列の拡張子を変更します。

ファイルの拡張子を変更するということではありません。

于 2013-03-25T11:36:44.900 に答える
0

これはほぼ同等の(正しい)コードだと思います:

        DirectoryInfo di = new DirectoryInfo(@"c:\Users\Desktop\test\");
        foreach (FileInfo fi in di.GetFiles())
        {
            fi.MoveTo(fi.Name.Substring(0, fi.Name.Length - fi.Extension.Length - 1) + ".txt"); // "test.bat" 8 - 3 - 1 = 4 "test" + ".txt" = "test.txt"
        }
        Console.WriteLine("Directory consists of " + di.GetFiles().Length + " files.");
        Console.ReadLine();
于 2013-03-25T11:43:42.017 に答える