2016-11-18 19 views
0

Ich muss den Namen einiger pdfs (1,2 TB) ändern. Der Name der Dateien ist zum Beispiel 20160112_0 (Jahr/Monat/Tag/_0). Ich muss den Dateinamen in tu, 12.Januar 2016 (Wochentag/Tag/Monat/Jahr) ändern.Dateiname C# mit einer Schleife ändern

Ich habe schon den Dateinamen, aber ich weiß nicht, wie man es richtig ändert.

string dir = @"path"; 
     string[] files = Directory.GetFiles(dir); 
     foreach (string file in files) 
      Console.WriteLine(Path.GetFileName(file)); 
+2

Try "Ich weiß nicht, wie es ändern rechts" können Sie das näher erläutern? Was ist das Problem, das du hast>? –

+0

File.Move (alterName, neuerName) – Gusman

+0

Suchen Sie nach ['File.Move'] (https://msdn.microsoft.com/en-us/library/system.io.file.move (v = vs. 110) .aspx)? –

Antwort

1

diese

 string dir = @"YourPath"; 
     string fileDate, new_fileDate; 
     DateTime dt; 
     foreach (string original_filename in Directory.GetFiles(dir)) 
     { 
      fileDate = Path.GetFileName(original_filename).Substring(0, 8); 
      dt = DateTime.ParseExact(fileDate, "yyyyMMdd", CultureInfo.InvariantCulture); 
      new_fileDate = dt.ToString("ddd_dd_MMMM_yyyy"); 
      File.Move(original_filename, original_filename.Replace(fileDate, new_fileDate)); 
     } 
+0

Thx Mann ^^ ist funktioniert :) –

+0

@LovedeepSingh ändern Sie einfach new_fileDate = dt.ToString ("") in welches Format auch immer Sie am besten finden, die datetime bezogenen Schlüsselwörter finden Sie hier https://msdn.microsoft.com/en- us/library/8kb3ddd4 (v = vs.110) .aspx – Innat3

+0

Vielen Dank. Du hast mir viel Zeit gespart :) –

0
string path = @"path"; 
    System.IO.DirectoryInfo dir = System.IO.DirectoryInfo(path); 
    foreach System.IO.FileInfo file in dir.GetFiles()){ 
     string newname = GetNewName(file.Name); 
if(newname!=file.Name) 
     file.Move(file.FullName, System.IO.Path.Combine(file.DiretoryName, newname); 
    } 

    public string GetNewName(string f){ 
     string without_ext = f.split('.').First(); 
    string result = f; 
     Match m = Regex.Match(without_ext, "(\\d{4})(\\d[012]?)(\\d[0123]?\\d)") 
     if(m.Success){ 
      result = $"{m.Groups[3].Value}.{CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(int.Parse(m.Groups[2].Value)} {m.Groups[1].Value).{f.split('.').Last()}}; 
     } 
     return result; 
    } 
+0

Es gibt einige Syntaxfehler, die ich nicht beheben kann. –

1
//from your code: 
DateTime fileDate; 
var newFileName = newFileName(Path.GetFileName(file), out fileDate); 
File.Move(newFileName); 


string newFileName(string oldFileName, out DateTime fileDate) 
    { 

     var fileDate = DateTime.ParseExact(oldFileName.Take(8), 
              "yyyyMMdd", 
              CultureInfo.InvariantCulture, 
              DateTimeStyles.None) ; 

    var nfn = fileDate.Day.ToString() + "." + fileDay.Month.ToString("MMM") + fileDay.Year.ToString("YYYY") + ".pdf"; 

    return nfn; 

    }