2013-03-21 192 views
7

我有一個相對較大的Visual Studio解決方案。如何將Visual Studio中的所有源代碼導出到文本文件中?

我需要將所有源代碼導出到文本文件中。我也想在某處包含一個文件名。我該怎麼做?

例如,如果我有一個類型

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

我想這個去output.txt文件(或任何其他文本格式),並出現像這樣

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

所有其他類型只能附加到文件的末尾。我嘗試了Resharper,但其頭文件選項只能包含靜態文本(我試過Filename: $FILENAME$),模板選項只適用於新創建的類。

夥計們,這是一個研究項目,我必須提供源代碼和論文。

+0

我很抱歉,但我不能幫助自己從問。 。 。爲什麼?你爲什麼需要這樣做? – 2013-03-21 11:56:41

+0

@oleksii - 非常感謝您的贊同。我永遠不知道是否值得回答這些問題,因爲大多數答案都是類似的,並且都在很短的時間內完成。 – MarcF 2013-03-21 12:06:57

回答

8

這應該做的伎倆

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

備註:如果您遇到性能或存儲效率低下,嘗試使用StringBuilder代替,並設置它在開始時的所有文件的內容總容量。這將消除在最後Select方法中創建的大量冗餘字符串。

1

我會寫一個簡單的控制檯應用程序來做到這一點。它會搜索擴展名爲* .cs的所有文件,進行必要的修改,然後將文件保存到所需的位置。您可以使用Directory.EnumerateDirectories()迭代地遍歷目錄。

2

我會去一個自制的解決方案。

這有助於您獲取每個文件的字符串內容。

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

你有文件名,所以你可以在開頭追加它。

您只需要解析所有目錄即可。

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); 
      } 
    } 
相關問題