【问题标题】:How to export all the source code from Visual Studio into a text file?如何将 Visual Studio 中的所有源代码导出到文本文件中?
【发布时间】:2013-03-21 11:51:30
【问题描述】:

我有一个相对较大的 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$)而且模板选项只适用于新创建的类。

伙计们,这是一个学习项目,我必须提供源代码和论文。

【问题讨论】:

  • 对不起,我忍不住要问。 . .为什么?为什么需要这样做?
  • @oleksii - 非常感谢您对投票的公平性。我永远不知道是否值得回答这些问题,因为大多数答案都是相似的,而且都是在很短的时间内完成的。

标签: c# visual-studio-2010 export resharper


【解决方案1】:

这应该可以解决问题

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 方法中创建的大量冗余字符串。

【讨论】:

    【解决方案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);
               }
       }
    

    【讨论】:

      【解决方案3】:

      作为一个无代码解决方案,如何尝试 windows 命令行 将所有文件合并为一个。

      例如复制 /b *.cs newfile.txt

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

      诚然,它又快又脏,但它可能会通过一些剪裁来产生你所需要的东西

      【讨论】:

        【解决方案4】:

        我会编写一个简单的控制台应用程序来做到这一点。它会搜索所有带有 *.cs 扩展名的文件,进行必要的修改,然后将文件保存到所需的位置。您可以使用Directory.EnumerateDirectories() 迭代地遍历目录。

        【讨论】:

          猜你喜欢
          • 2019-11-09
          • 1970-01-01
          • 2017-08-11
          • 1970-01-01
          • 1970-01-01
          • 2018-05-19
          • 1970-01-01
          • 1970-01-01
          • 2017-12-07
          相关资源
          最近更新 更多