2013-11-13 2 views
0

, когда я запускаю этот код:код не печатает целые данные в выходном файле

static void Main(string[] args) 
    { 
     var currentDirectory = Directory.GetCurrentDirectory(); 
     var searchDirectory = new DirectoryInfo(currentDirectory); 

     var queryMatchingFiles = 
       from file in searchDirectory.GetFiles() 
       let fileContent = System.IO.File.ReadAllText(file.Name) 
       select file.Name; 

     StreamWriter outputCacheMeta = new StreamWriter(@"output.txt"); 

     foreach (var fileName in queryMatchingFiles.Where(fileName => !fileName.EndsWith(".txt") && !fileName.EndsWith(".exe") && !fileName.EndsWith(".xz"))) 
     { 
      // start the converion utility 
      ProcessStartInfo startInfo = new ProcessStartInfo(); 
      startInfo.FileName = "xz.exe"; 
      startInfo.Arguments = "-k -z " + fileName; 
      startInfo.CreateNoWindow = true; 
      startInfo.WindowStyle = ProcessWindowStyle.Hidden; 

      using (Process p = Process.Start(startInfo)) 
      { 
       while (!p.HasExited) 
       { 
        Thread.Sleep(300); 
       } 
      } 

      //Process.Start(startInfo); 

      Console.WriteLine(string.Format("Compressing file: '{0}'", fileName.ToString())); 

      // generate final string 
      FileInfo inFile = new FileInfo(fileName); 
      FileInfo outFile = new FileInfo(fileName + ".xz"); 

      outputCacheMeta.WriteLine("<ContentFile Name=\"" + fileName.ToString() + "\" Size=\"" + inFile.Length.ToString() + "\" SHA1Hash=\"" + HashCalc.GetSHA1Hash(fileName).ToString() + "\" CompressedSize=\"" + outFile.Length.ToString() + "\" />"); 
      //Console.WriteLine(string.Format(("<ContentFile Name=\"" + fileName.ToString() + "\" Size=\"" + inFile.Length.ToString() + "\" SHA1Hash=\"" + HashCalc.GetSHA1Hash(fileName).ToString() + "\" CompressedSize=\"" + outFile.Length.ToString() + "\" />"))); 
     } 
    } 

он не печатает все в выходном файле (output.txt), он печатает это: http://pastebin.com/1vTQZVih (извините за внешний ссылка).

Проблема в том, что он внезапно «останавливается» для записи в выходной файл.

Спасибо!

+0

Добавить outputCacheMeta.Flush(); в конце (но внутри) цикл foreach –

+0

Вы отлаживали и проходили через код, чтобы узнать, что его останавливает? –

+0

Насколько велика patch_survival.ff? – Recursor

ответ

2

Вы не являетесь Flush() ing или Close() В своем StreamWriter перед выходом программы. Некоторые из ваших данных файла буферизуются для записи в файл, но на самом деле они не будут записаны до тех пор, пока вы не закроете и не закроете поток.