2013-05-15 16 views
1

Мое требование состоит в том, чтобы прочитать местоположение файла, чтобы получить список .jpg & .xml файлов вместе с их меткой времени и записать ее в файл.Получить файл timstamp и pipe с выходом файла списка в C#

Я новичок в C#, до сих пор мне удалось получить список файлов и написать вывод в файл, но я не уверен, как получить отметку времени файла и написать его вместе со списком.

Я добавил код существующего кода, мне понадобится временная метка для каждого файла в списке, чтобы я мог использовать эти данные для сравнения по течению.

Просьба сообщить.

Код
using System; 
    using System.Collections; 
    using System.Collections.Generic; 
    using System.IO; 
    using System.Linq; 
    using System.Text; 

    class Program 
    { 



    static void Main() 
    { 

     TextWriter tw = new StreamWriter(@"C:\test\logfile_c#.txt"); 

     // Put all xml file names in directory into array. 
     string[] array1 = Directory.GetFiles(@"C:\test","*.xml"); 

     // Put all jpg files in directory into array. 
     string[] array2 = Directory.GetFiles(@"C:\test", "*.jpg"); 


     // Display all XML files and write to text file. 
     Console.WriteLine("--- XML Files: ---"); 
     foreach (string name in array1) 
     { 
      Console.WriteLine(name); 
      tw.WriteLine(name); 
      Console.ReadLine(); 
     } 

     // Display all JPG files and write to text file.. 
     Console.WriteLine("--- JPG Files: ---"); 
     foreach (string name in array2) 
     { 
      Console.WriteLine(name); 
      tw.WriteLine(name); 
      Console.ReadLine(); 
     } 

     tw.Close(); 
    } 
    } 

Выход

C: \ Test \ chq.xml C: \ Test \ img_1.jpg C: \ Test \ IMG_2.jpg

ответ

2

Зависит который метка времени вы после. Вы можете получить время создания с помощью:

new FileInfo(filename).CreationTime; 

Это даст вам DateTime. Таким образом, вы можете просто сделать:

tw.WriteLine(new FileInfo(name).CreationTime.ToString()); 

.ToString() не является обязательным - вы можете использовать его, чтобы контролировать формат даты/времени, используемый в вашем выводе. Также есть свойство измененного времени, которое вы можете использовать, если хотите.

+0

строка [] array_xml = FileInfo (@ "C: \ тест", "* .xml"). CreationTime.ToString(); Этот код выкидывает две ошибки: System.IO.FileInfo не содержит конструктора, который содержит два аргумента, а System.IO.FileInfo является типом, но используется как переменная – user2385057

+0

, создавая строковую строку temp = "@C: \ test" + " * .xml "; выбрасывает ту же ошибку – user2385057

+0

@ user2385057 - эта строка, которую я вам дал, должна находиться внутри петель 'foreach'. Он не создает массив. 'new FileInfo' принимает имя файла в качестве его параметра конструктора и возвращает экземпляр' FileInfo' с дополнительными сведениями о файле. – PhonicUK

0

Как вы сказали, вы только что начали изучать, я собрал этот слегка модифицированный код, чтобы показать вам, где вы можете упростить некоторые вещи. Я также удалил чтение и запись в Console.

using System.IO; 

namespace Test 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      // try to name your variables in a meaningful way. 
      string[] xmlFiles = Directory.GetFiles(@"C:\test", "*.xml"); 
      string[] jpgFiles = Directory.GetFiles(@"C:\test", "*.jpg"); 

      // File.CreateText creates a new file and returns a stream writer. 
      // wrap it in a using statement so you don't have to worry about closing it yourself 
      using (var writer = File.CreateText(@"C:\test\logfile_c#.txt")) 
      { 
       FileInfo fi; 
       foreach (string name in xmlFiles) 
       { 
        // FileInfo instances will give you access to properties 
        // of the file, including the creation date and time. 
        fi = new FileInfo(name); 
        // Use an overload of WriteLine using a format string. 
        writer.WriteLine("file name: {0}, creation time: {1}", name, fi.CreationTime); 
       } 
       foreach (string name in jpgFiles) 
       { 
        fi = new FileInfo(name); 
        writer.WriteLine("file name: {0}, creation time: {1}", name, fi.CreationTime); 
       } 
      } 
     } 
    } 
} 
+0

спасибо rob, это очень полезно :) – user2385057

0

Вы можете попробовать написать код, как показано ниже:

//Select directory 
DirectoryInfo dirInfo = new DirectoryInfo("D:\\test"); 

//Get .xml files 
FileInfo[] xmlFiles = dirInfo.GetFiles("*.xml"); 
//Get .jpg files 
FileInfo[] jpgFiles = dirInfo.GetFiles("*.jpg"); 

//Merge files together for convenience 
List<FileInfo> allFiles = new List<FileInfo>(); 
allFiles.InsertRange(allFiles.Count, xmlFiles); 
allFiles.InsertRange(allFiles.Count, jpgFiles); 

//Loop through all files and write their name and creation time to text file 
using (StreamWriter writer = new StreamWriter("D:\\test\\test.txt")) 
{ 
    foreach (FileInfo currentFile in allFiles) 
    { 
     //Format string in desired format 
     string info = string.Format("Name: {0} Creation time: {1}", currentFile.Name, currentFile.CreationTime); 

     writer.WriteLine(info); 
    } 
}