c# - सी#में एक फ़ाइल का नाम बदलें




file rename (9)

उम्मीद है कि! यह आपके लिए सहायक होगा। :)

  public static class FileInfoExtensions
    {
        /// <summary>
        /// behavior when new filename is exist.
        /// </summary>
        public enum FileExistBehavior
        {
            /// <summary>
            /// None: throw IOException "The destination file already exists."
            /// </summary>
            None = 0,
            /// <summary>
            /// Replace: replace the file in the destination.
            /// </summary>
            Replace = 1,
            /// <summary>
            /// Skip: skip this file.
            /// </summary>
            Skip = 2,
            /// <summary>
            /// Rename: rename the file. (like a window behavior)
            /// </summary>
            Rename = 3
        }
        /// <summary>
        /// Rename the file.
        /// </summary>
        /// <param name="fileInfo">the target file.</param>
        /// <param name="newFileName">new filename with extension.</param>
        /// <param name="fileExistBehavior">behavior when new filename is exist.</param>
        public static void Rename(this System.IO.FileInfo fileInfo, string newFileName, FileExistBehavior fileExistBehavior = FileExistBehavior.None)
        {
            string newFileNameWithoutExtension = System.IO.Path.GetFileNameWithoutExtension(newFileName);
            string newFileNameExtension = System.IO.Path.GetExtension(newFileName);
            string newFilePath = System.IO.Path.Combine(fileInfo.Directory.FullName, newFileName);

            if (System.IO.File.Exists(newFilePath))
            {
                switch (fileExistBehavior)
                {
                    case FileExistBehavior.None:
                        throw new System.IO.IOException("The destination file already exists.");
                    case FileExistBehavior.Replace:
                        System.IO.File.Delete(newFilePath);
                        break;
                    case FileExistBehavior.Rename:
                        int dupplicate_count = 0;
                        string newFileNameWithDupplicateIndex;
                        string newFilePathWithDupplicateIndex;
                        do
                        {
                            dupplicate_count++;
                            newFileNameWithDupplicateIndex = newFileNameWithoutExtension + " (" + dupplicate_count + ")" + newFileNameExtension;
                            newFilePathWithDupplicateIndex = System.IO.Path.Combine(fileInfo.Directory.FullName, newFileNameWithDupplicateIndex);
                        } while (System.IO.File.Exists(newFilePathWithDupplicateIndex));
                        newFilePath = newFilePathWithDupplicateIndex;
                        break;
                    case FileExistBehavior.Skip:
                        return;
                }
            }
            System.IO.File.Move(fileInfo.FullName, newFilePath);
        }
    }

इस कोड का उपयोग कैसे करें?

class Program
    {
        static void Main(string[] args)
        {
            string targetFile = System.IO.Path.Combine(@"D://test", "New Text Document.txt");
            string newFileName = "Foo.txt";

            // full pattern
            System.IO.FileInfo fileInfo = new System.IO.FileInfo(targetFile);
            fileInfo.Rename(newFileName);

            // or short form
            new System.IO.FileInfo(targetFile).Rename(newFileName);
        }
    }

मैं सी # का उपयोग कर फ़ाइल का नाम कैसे बदलूं?


  1. पहला समाधान

    System.IO.File.Move समाधान से यहां पोस्ट करें (चिह्नित उत्तर शामिल)। यह नेटवर्क पर विफल रहता है। हालांकि, कॉपी / डिलीट पैटर्न स्थानीय रूप से और नेटवर्क पर काम करता है। एक चाल समाधान का पालन करें, लेकिन इसके बजाय प्रतिलिपि के साथ प्रतिस्थापित करें। फिर मूल फ़ाइल को हटाने के लिए File.Delete का उपयोग करें।

    आप इसे सरल बनाने के लिए एक नामकरण विधि बना सकते हैं।

  2. उपयोग में आसानी

    सी # में वीबी असेंबली का प्रयोग करें। माइक्रोसॉफ्ट के संदर्भ में जोड़ें। VisualBasic

    फिर फ़ाइल का नाम बदलने के लिए:

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

    दोनों तार हैं। ध्यान दें कि माईफाइल का पूरा पथ है। नया नाम नहीं है। उदाहरण के लिए:

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

    C:\whatever\ फ़ोल्डर अब b.txt


आप इसे एक नई फाइल के रूप में कॉपी कर सकते हैं और फिर System.IO.File क्लास का उपयोग कर पुराने को हटा सकते हैं:

if (File.Exists(oldName))
{
    File.Copy(oldName, newName, true);
    File.Delete(oldName);
}

आप इसे करने के लिए System.IO.File.Move का उपयोग कर सकते हैं।


चलना वही कर रहा है = पुराना कॉपी करें और हटाएं।

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

जब सी # में कुछ सुविधा नहीं है, तो मैं सी ++ या सी का उपयोग करता हूं:

public partial class Program
{
    [DllImport("msvcrt", CallingConvention = CallingConvention.Cdecl, SetLastError = true)]
    public static extern int rename(
            [MarshalAs(UnmanagedType.LPStr)]
            string oldpath,
            [MarshalAs(UnmanagedType.LPStr)]
            string newpath);

    static void FileRename()
    {
        while (true)
        {
            Console.Clear();
            Console.Write("Enter a folder name: ");
            string dir = Console.ReadLine().Trim('\\') + "\\";
            if (string.IsNullOrWhiteSpace(dir))
                break;
            if (!Directory.Exists(dir))
            {
                Console.WriteLine("{0} does not exist", dir);
                continue;
            }
            string[] files = Directory.GetFiles(dir, "*.mp3");

            for (int i = 0; i < files.Length; i++)
            {
                string oldName = Path.GetFileName(files[i]);
                int pos = oldName.IndexOfAny(new char[] { '0', '1', '2' });
                if (pos == 0)
                    continue;

                string newName = oldName.Substring(pos);
                int res = rename(files[i], dir + newName);
            }
        }
        Console.WriteLine("\n\t\tPress any key to go to main menu\n");
        Console.ReadKey(true);
    }
}

मेरे मामले में, मैं नामित फ़ाइल का नाम अद्वितीय होना चाहता हूं, इसलिए मैं नाम पर डेटाटाइम टिकट जोड़ता हूं। इस तरह, 'पुराने' लॉग का फ़ाइल नाम हमेशा अद्वितीय होता है:

   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"))));
                }
            }

System.IO.File.Move पर एक नज़र डालें, फ़ाइल को एक नए नाम पर "स्थानांतरित करें"।

System.IO.File.Move("oldfilename", "newfilename");

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




rename