2013-03-21 17 views
7

Göreceli olarak büyük bir Visual Studio çözümüm var.Tüm kaynak kodu Visual Studio'dan bir metin dosyasına nasıl dışa aktarılır?

Tüm kaynak kodunu bir metin dosyasına vermem gerekiyor. Ayrıca bir yere bir dosya adı da eklemek istiyorum. Bunu nasıl yapabilirim? Ben

namespace MyProject.Core 
{ 
    /// <summary> 
    /// Enumerates possible record status 
    /// </summary> 
    public enum RecordType 
    { 
     NonWearTime = 0, 
     WearTime = 1, 
     NotClassified = 2 
    } 
} 

Bu output.txt dosya (veya başka bir metin biçiminde) gidin ve böylece

//*********************************** 
//Filename: RecordType.cs 
//*********************************** 
namespace MyProject.Core 
{ 
    /// <summary> 
    /// Enumerates possible record status 
    /// </summary> 
    public enum RecordType 
    { 
     NonWearTime = 0, 
     WearTime = 1, 
     NotClassified = 2 
    } 
} 

gibi görünmesini istediğiniz bir türü var Örneğin

Diğer tüm türleri Sadece dosyanın sonuna eklenir. Resharper'ı denedim, ancak başlık dosyası seçenekleri yalnızca statik metin içerebilir (Filename: $FILENAME$'u denedim) ve şablon seçeneği yalnızca yeni oluşturulan sınıflar için geçerlidir.

Milletler, bu kaynak kodu bir tez ile birlikte vermek zorunda olduğum bir çalışma projesidir.

+0

üzgünüm terzilik ile gerektirir ne üretmek olabilir, ama sormaktan kendimi tutamadım . . . niye ya? Bunu neden yapmak zorundasınız? –

+0

@oleksii - Oy verdiğiniz oylarla adaletiniz için çok teşekkürler. Bu soruları cevaplamaya değip değmeyeceğini asla bilmiyorum, çünkü çoğu cevap benzerdir ve hepsi de kısa bir zaman dilimindedir. – MarcF

cevap

8

Bu kandırmasına

string rootPath = @"path you your root folder"; 
var header = "***********************************" + Environment.NewLine; 

var files = Directory.GetFiles(rootPath, "*.cs", SearchOption.AllDirectories); 

var result = files.Select(path => new { Name = Path.GetFileName(path), Contents = File.ReadAllText(path)}) 
        .Select(info => 
         header 
        + "Filename: " + info.Name + Environment.NewLine 
        + header 
        + info.Contents); 


var singleStr = string.Join(Environment.NewLine, result); 
Console.WriteLine (singleStr); 
File.WriteAllText(@"C:\output.txt", singleStr, Encoding.UTF8); 

Notlar yapmalıdır: Performansın veya bellek verimsizliklerini yaşarsanız, bunun yerine StringBuilder kullanmak ve tüm dosyalar içeriğinin toplamına başında Kapasite ayarlanamadı.Ayrıca deneyin. Bu, son Select yönteminde oluşturulan fazla sayıda dizeleri ortadan kaldıracaktır.

1

Bunu yapmak için basit bir konsol uygulaması yazabilirim. * .cs uzantılı tüm dosyaları arar, gerekli değişiklikleri yapar ve ardından dosyayı istenen konuma kaydeder. Directory.EnumerateDirectories()'u kullanarak yinelemeli olarak dizinler arasında geçiş yapabilirsiniz.

2

Ev yapımı bir çözüm için giderdim.

Bu, her dosyanın içeriğine bir Dize girmenize yardımcı olur.

using System.IO; 
... 
foreach (string file in Directory.EnumerateFiles(folderPath, "*.cs")) 
{ 
    string contents = File.ReadAllText(file); 
} 

Dosya adınız var, bu nedenle en başa ekleyebilirsiniz.

Yapmanız gereken tek şey, tüm dizinleri ayrıştırmaktır.

public void DirSearch(string root) 
    { 

      foreach (string file in Directory.EnumerateFiles(root, "*.cs")) 
      { 
        string contents = File.ReadAllText(file); 
        // Write to your outputfile once you've happened what you want in your header. 
      } 

      foreach (string d in Directory.GetDirectories(root)) 
      { 
       DirSearch(d); 
      } 
    } 
İlgili konular