Add project files.

alphons <alphons@heijden.com> 10 May 2025, 13:57
36a84bb039f2f7e4f70bf49c6f0c5dd16e21727d
6 files changed
  • GrokCatter.sln
  • GrokCatter/Form1.Designer.cs
  • GrokCatter/Form1.cs
  • GrokCatter/Form1.resx
  • GrokCatter/GrokCatter.csproj
  • GrokCatter/Program.cs
diff --git a/GrokCatter.sln b/GrokCatter.sln
new file mode 100644
index 0000000..8faaba8
--- /dev/null
+++ b/GrokCatter.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.13.35931.197 d17.13
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GrokCatter", "GrokCatter\GrokCatter.csproj", "{73CAD9B2-F49A-494E-A8C4-BD234CF90DC3}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {73CAD9B2-F49A-494E-A8C4-BD234CF90DC3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {73CAD9B2-F49A-494E-A8C4-BD234CF90DC3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {73CAD9B2-F49A-494E-A8C4-BD234CF90DC3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {73CAD9B2-F49A-494E-A8C4-BD234CF90DC3}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {091616C9-03DA-422D-AB24-1CDCF9CB5A08}
+ EndGlobalSection
+EndGlobal
diff --git a/GrokCatter/Form1.Designer.cs b/GrokCatter/Form1.Designer.cs
new file mode 100644
index 0000000..8cb0e16
--- /dev/null
+++ b/GrokCatter/Form1.Designer.cs
@@ -0,0 +1,159 @@
+namespace GrokCatter
+{
+ partial class Form1
+ {
+ /// <summary>
+ /// Required designer variable.
+ /// </summary>
+ private System.ComponentModel.IContainer components = null;
+
+ /// <summary>
+ /// Clean up any resources being used.
+ /// </summary>
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ /// <summary>
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ /// </summary>
+ private void InitializeComponent()
+ {
+ button1 = new Button();
+ textBox1 = new TextBox();
+ textBox2 = new TextBox();
+ listView1 = new ListView();
+ button2 = new Button();
+ button3 = new Button();
+ checkBox1 = new CheckBox();
+ button4 = new Button();
+ SuspendLayout();
+ //
+ // button1
+ //
+ button1.Location = new Point(12, 41);
+ button1.Name = "button1";
+ button1.Size = new Size(79, 23);
+ button1.TabIndex = 0;
+ button1.Text = "List Files";
+ button1.UseVisualStyleBackColor = true;
+ button1.Click += button1_Click;
+ //
+ // textBox1
+ //
+ textBox1.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
+ textBox1.Location = new Point(12, 12);
+ textBox1.Name = "textBox1";
+ textBox1.Size = new Size(723, 23);
+ textBox1.TabIndex = 1;
+ textBox1.Text = "D:\\moneywise\\git\\2_ControllersCore\\MongoDb";
+ //
+ // textBox2
+ //
+ textBox2.AcceptsReturn = true;
+ textBox2.AcceptsTab = true;
+ textBox2.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
+ textBox2.Font = new Font("Courier New", 8.25F, FontStyle.Regular, GraphicsUnit.Point, 0);
+ textBox2.Location = new Point(247, 70);
+ textBox2.Multiline = true;
+ textBox2.Name = "textBox2";
+ textBox2.ScrollBars = ScrollBars.Both;
+ textBox2.Size = new Size(488, 344);
+ textBox2.TabIndex = 2;
+ //
+ // listView1
+ //
+ listView1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left;
+ listView1.CheckBoxes = true;
+ listView1.GridLines = true;
+ listView1.Location = new Point(12, 70);
+ listView1.Name = "listView1";
+ listView1.Size = new Size(227, 344);
+ listView1.TabIndex = 3;
+ listView1.UseCompatibleStateImageBehavior = false;
+ listView1.View = View.Details;
+ //
+ // button2
+ //
+ button2.Anchor = AnchorStyles.Top | AnchorStyles.Right;
+ button2.Location = new Point(247, 41);
+ button2.Name = "button2";
+ button2.Size = new Size(79, 23);
+ button2.TabIndex = 4;
+ button2.Text = "Cat";
+ button2.UseVisualStyleBackColor = true;
+ button2.Click += button2_Click;
+ //
+ // button3
+ //
+ button3.Anchor = AnchorStyles.Top | AnchorStyles.Right;
+ button3.Location = new Point(534, 41);
+ button3.Name = "button3";
+ button3.Size = new Size(79, 23);
+ button3.TabIndex = 5;
+ button3.Text = "Clear";
+ button3.UseVisualStyleBackColor = true;
+ button3.Click += button3_Click;
+ //
+ // checkBox1
+ //
+ checkBox1.AutoSize = true;
+ checkBox1.Location = new Point(108, 44);
+ checkBox1.Name = "checkBox1";
+ checkBox1.Size = new Size(38, 19);
+ checkBox1.TabIndex = 6;
+ checkBox1.Text = "all";
+ checkBox1.UseVisualStyleBackColor = true;
+ checkBox1.CheckedChanged += checkBox1_CheckedChanged;
+ //
+ // button4
+ //
+ button4.Anchor = AnchorStyles.Top | AnchorStyles.Right;
+ button4.Location = new Point(656, 41);
+ button4.Name = "button4";
+ button4.Size = new Size(79, 23);
+ button4.TabIndex = 7;
+ button4.Text = "Copy";
+ button4.UseVisualStyleBackColor = true;
+ button4.Click += button4_Click;
+ //
+ // Form1
+ //
+ AutoScaleDimensions = new SizeF(7F, 15F);
+ AutoScaleMode = AutoScaleMode.Font;
+ ClientSize = new Size(747, 426);
+ Controls.Add(button4);
+ Controls.Add(checkBox1);
+ Controls.Add(button3);
+ Controls.Add(button2);
+ Controls.Add(listView1);
+ Controls.Add(textBox2);
+ Controls.Add(textBox1);
+ Controls.Add(button1);
+ Name = "Form1";
+ Text = "Form1";
+ ResumeLayout(false);
+ PerformLayout();
+ }
+
+ #endregion
+
+ private Button button1;
+ private TextBox textBox1;
+ private TextBox textBox2;
+ private ListView listView1;
+ private Button button2;
+ private Button button3;
+ private CheckBox checkBox1;
+ private Button button4;
+ }
+}
diff --git a/GrokCatter/Form1.cs b/GrokCatter/Form1.cs
new file mode 100644
index 0000000..b189a9b
--- /dev/null
+++ b/GrokCatter/Form1.cs
@@ -0,0 +1,85 @@
+namespace GrokCatter
+{
+ public partial class Form1 : Form
+ {
+ public Form1()
+ {
+ InitializeComponent();
+
+ listView1.Columns.Add("Name", 200);
+ }
+
+ private void button1_Click(object sender, EventArgs e)
+ {
+ Doit();
+ }
+
+ private void Doit()
+ {
+ try
+ {
+ this.listView1.Items.Clear();
+
+
+ if (!Directory.Exists(this.textBox1.Text))
+ {
+ MessageBox.Show("Invalid directory path!", "Error",
+ MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+
+
+ var files = Directory.GetFiles(textBox1.Text);
+
+ foreach (var file in files)
+ {
+ var item = new ListViewItem(Path.GetFileName(file))
+ {
+ Tag = file
+ };
+
+ listView1.Items.Add(item);
+ }
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show($"Error: {ex.Message}", "Error",
+ MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+
+ private void button3_Click(object sender, EventArgs e)
+ {
+ this.textBox2.Clear();
+ }
+
+ private async void button2_Click(object sender, EventArgs e)
+ {
+ var selectedItems = listView1.CheckedItems.Cast<ListViewItem>().ToList();
+ foreach (var selectedItem in selectedItems)
+ {
+ var file = selectedItem?.Tag?.ToString();
+ if (file == null)
+ continue;
+ var text = await File.ReadAllTextAsync(file);
+ this.textBox2.AppendText(Environment.NewLine);
+ this.textBox2.AppendText($"// {Path.GetFileName(file)}{Environment.NewLine}");
+ this.textBox2.AppendText($"// ------------------------{Environment.NewLine}");
+ this.textBox2.AppendText(text);
+ }
+ }
+
+ private void checkBox1_CheckedChanged(object sender, EventArgs e)
+ {
+ foreach (ListViewItem lvi in this.listView1.Items)
+ {
+ lvi.Checked = this.checkBox1.Checked;
+ }
+ }
+
+ private void button4_Click(object sender, EventArgs e)
+ {
+ Clipboard.SetText(this.textBox2.Text);
+ }
+ }
+}
diff --git a/GrokCatter/Form1.resx b/GrokCatter/Form1.resx
new file mode 100644
index 0000000..8b2ff64
--- /dev/null
+++ b/GrokCatter/Form1.resx
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+</root>
\ No newline at end of file
diff --git a/GrokCatter/GrokCatter.csproj b/GrokCatter/GrokCatter.csproj
new file mode 100644
index 0000000..663fdb8
--- /dev/null
+++ b/GrokCatter/GrokCatter.csproj
@@ -0,0 +1,11 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+ <PropertyGroup>
+ <OutputType>WinExe</OutputType>
+ <TargetFramework>net8.0-windows</TargetFramework>
+ <Nullable>enable</Nullable>
+ <UseWindowsForms>true</UseWindowsForms>
+ <ImplicitUsings>enable</ImplicitUsings>
+ </PropertyGroup>
+
+</Project>
\ No newline at end of file
diff --git a/GrokCatter/Program.cs b/GrokCatter/Program.cs
new file mode 100644
index 0000000..4cf432f
--- /dev/null
+++ b/GrokCatter/Program.cs
@@ -0,0 +1,17 @@
+namespace GrokCatter
+{
+ internal static class Program
+ {
+ /// <summary>
+ /// The main entry point for the application.
+ /// </summary>
+ [STAThread]
+ static void Main()
+ {
+ // To customize application configuration such as set high DPI settings or default font,
+ // see https://aka.ms/applicationconfiguration.
+ ApplicationConfiguration.Initialize();
+ Application.Run(new Form1());
+ }
+ }
+}
\ No newline at end of file