2013-03-21 5 views
7

Ho una soluzione di Visual Studio relativamente grande.Come esportare tutto il codice sorgente da Visual Studio in un file di testo?

Ho bisogno di esportare tutto il codice sorgente in un file di testo. Vorrei anche includere un nome di file da qualche parte. Come posso farlo?

Per esempio se ho un tipo

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

voglio questo per andare al file output.txt (o qualsiasi altro formato di testo) e appaiono in questo modo

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

Tutti gli altri tipi deve essere aggiunto alla fine del file. Ho provato Resharper, ma le sue opzioni di file di intestazione possono contenere solo testo statico (ho provato Filename: $FILENAME$) e l'opzione modello si applica solo alle classi appena create.

Gente, questo è un progetto di studio, in cui devo fornire il codice sorgente insieme a una tesi.

+0

Mi dispiace, ma non mi può aiutare da chiedere . . . perché? Perché hai bisogno di fare questo? –

+0

@oleksii - Mille grazie per la tua equità con i voti alti. Non so mai se valga la pena di rispondere a queste domande poiché la maggior parte delle risposte sono invariabilmente simili, e tutte in un breve lasso di tempo. – MarcF

risposta

8

Questo dovrebbe fare il trucco

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

Osservazioni: se si verificano le inefficienze di prestazioni o di memoria, provare a utilizzare StringBuilder invece e impostare la sua capacità ad inizio alla somma di tutti i contenuti dei file. Questo eliminerà molte stringhe ridondanti, create nell'ultimo metodo Select.

1

Vorrei scrivere una semplice app per console per farlo. Dovrebbe cercare tutti i file con estensione * .cs, apportare le modifiche necessarie e quindi salvare il file nella posizione desiderata. È possibile scorrere le directory in modo iterativo utilizzando Directory.EnumerateDirectories().

2

Vorrei andare per una soluzione fatta in casa.

Questo consente di inserire in una stringa il contenuto di ciascun file.

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

Si ha il nome file, quindi è possibile aggiungerlo all'inizio.

Tutto ciò che è ancora necessario fare è analizzare tutte le directory.

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