2013-03-21 2 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

미안 재봉으로 필요로 무엇을 생산할 수 있지만 내가 질문에서 자신을 도울 수 없습니다 . . . 왜? 왜 이럴 필요가 있니? –

+0

@oleksii - 최대 득표에 대한 공정성에 대해 감사드립니다. 변함없이 대부분의 답변이 비슷하고 짧은 시간 내에 답변 할 수 있기 때문에 이러한 질문에 답할 가치가 있는지 여부를 알 수 없습니다. – MarcF

답변

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

나는 집에서 만드는 해결책을 찾으러 갈 것이다.

이렇게하면 각 파일의 내용을 String으로 가져올 수 있습니다.

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); 
      } 
    } 
관련 문제