[c#] C #에서 파일 이름 바꾸기


5 Answers

System.IO.File.Move(oldNameFullPath, newNameFullPath);
Question

C #을 사용하여 파일의 이름을 바꾸려면 어떻게합니까?




참고 : 이 예제 코드에서는 디렉토리를 열고 파일 이름에 열린 괄호와 닫힌 괄호가있는 PDF 파일을 검색합니다. 원하는 이름의 문자를 확인하고 바꿀 수 있거나 replace 함수를 사용하여 완전히 새로운 이름을 지정할 수 있습니다.

이 코드에서 좀 더 정교한 이름을 변경하는 다른 방법도 있지만 File.Move를 사용하여 배치 이름 바꾸기를 수행하는 방법을 보여 주겠다는 것이 주된 의도였습니다. 이것은 랩톱에서 실행할 때 180 개의 디렉토리에있는 335 개의 PDF 파일에 대해 작동했습니다. 이것은 순간 코드에 박차를 가하고 더욱 정교한 방법으로 할 수 있습니다.

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

namespace BatchRenamer
{
    class Program
    {
        static void Main(string[] args)
        {
            var dirnames = Directory.GetDirectories(@"C:\the full directory path of files to rename goes here");

            int i = 0;

            try
            {
                foreach (var dir in dirnames)
                {
                    var fnames = Directory.GetFiles(dir, "*.pdf").Select(Path.GetFileName);

                    DirectoryInfo d = new DirectoryInfo(dir);
                    FileInfo[] finfo = d.GetFiles("*.pdf");

                    foreach (var f in fnames)
                    {
                        i++;
                        Console.WriteLine("The number of the file being renamed is: {0}", i);

                        if (!File.Exists(Path.Combine(dir, f.ToString().Replace("(", "").Replace(")", ""))))
                        {
                            File.Move(Path.Combine(dir, f), Path.Combine(dir, f.ToString().Replace("(", "").Replace(")", "")));
                        }
                        else
                        {
                            Console.WriteLine("The file you are attempting to rename already exists! The file path is {0}.", dir);
                            foreach (FileInfo fi in finfo)
                            {
                                Console.WriteLine("The file modify date is: {0} ", File.GetLastWriteTime(dir));
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            Console.Read();
        }
    }
}



필자의 경우 이름이 바뀐 파일의 이름이 고유해야하므로 이름에 datetime 스탬프를 추가합니다. 이렇게하면 '이전'로그의 파일 이름은 항상 고유합니다.

   if (File.Exists(clogfile))
            {
                Int64 fileSizeInBytes = new FileInfo(clogfile).Length;
                if (fileSizeInBytes > 5000000)
                {
                    string path = Path.GetFullPath(clogfile);
                    string filename = Path.GetFileNameWithoutExtension(clogfile);
                    System.IO.File.Move(clogfile, Path.Combine(path, string.Format("{0}{1}.log", filename, DateTime.Now.ToString("yyyyMMdd_HHmmss"))));
                }
            }



  1. 첫 번째 솔루션

    여기에 게시 된 System.IO.File.Move 솔루션을 피하십시오 (표시된 답변 포함). 그것은 네트워크에서 실패합니다. 그러나 복사 / 삭제 패턴은 로컬 및 네트워크를 통해 작동합니다. 이동 솔루션 중 하나를 따르되 대신 복사로 교체하십시오. 그런 다음 File.Delete를 사용하여 원본 파일을 삭제하십시오.

    Rename 메서드를 만들어 간단하게 만들 수 있습니다.

  2. 사용의 용이성

    C #에서 VB 어셈블리를 사용하십시오. Microsoft.VisualBasic에 대한 참조 추가

    그런 다음 파일 이름을 바꿉니다.

    Microsoft.VisualBasic.FileIO.FileSystem.RenameFile(myfile, newName);

    둘 다 문자열입니다. myfile에는 전체 경로가 있습니다. newName은 그렇지 않습니다. 예 :

    a = "C:\whatever\a.txt";
    b = "b.txt";
    Microsoft.VisualBasic.FileIO.FileSystem.RenameFile(a, b);
    

    C:\whatever\ 폴더에는 이제 b.txt 가 포함 b.txt .




이동은 이전 작업을 복사하고 삭제합니다.

File.Move(@"C:\ScanPDF\Test.pdf", @"C:\BackupPDF\" + string.Format("backup-{0:yyyy-MM-dd_HH:mm:ss}.pdf",DateTime.Now));



File.Move 메서드에서 이미 존재하는 경우 파일을 덮어 쓰지 않습니다. 그리고 예외를 던질 것입니다.

따라서 파일이 존재하는지 여부를 확인해야합니다.

/* Delete the file if exists, else no exception thrown. */

File.Delete(newFileName); // Delete the existing file if exists
File.Move(oldFileName,newFileName); // Rename the oldFileName into newFileName

또는 예외를 피하기 위해 try catch로 둘러 쌉니다.




Related



Tags

c# c#   file   rename