7

比較的大規模な 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$ました)、テンプレート オプションは新しく作成されたクラスにのみ適用されます。

皆さん、これは研究プロジェクトであり、論文とともにソース コードを提供する必要があります。

4

4 に答える 4

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これにより、最後の方法で作成された多くの冗長な文字列が削除されます。

于 2013-03-21T11:56:48.520 に答える
2

コードなしの解決策として、 Windowsコマンドラインですべてのファイルを1つにマージしてみてはどうでしょうか。

例:/ b *.csnewfile.txtをコピーします

https://superuser.com/questions/111825/any-command-line-or-batch-cmd-to-concatenate-multiple-files

確かにその迅速で汚いですが、それはあなたがいくつかの仕立てで必要なものを生み出すかもしれません

于 2013-03-21T12:02:27.953 に答える
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);
           }
   }
于 2013-03-21T11:56:02.340 に答える
1

そのための簡単なコンソール アプリを作成します。*.cs 拡張子を持つすべてのファイルを検索し、必要な変更を加えてから、ファイルを目的の場所に保存します。を使用して、ディレクトリを繰り返しループできますDirectory.EnumerateDirectories()

于 2013-03-21T11:55:13.363 に答える