/// <summary>
/// Windows Explorer Helperes
/// </summary>
public class FileExplorerOpener
{
/// <summary>
/// Open Windows File Explorer, in it open a directory and select
/// a specific file
/// </summary>
/// <param name="filePath"></param>
/// <returns></returns>
public bool OpenDirectoryAndSelectFile(string filePath)
{
var fi = new FileInfo(filePath);
var outcome = fi.Exists;
if (outcome)
{
var argument = "/select, \"" + fi.FullName + "\"";
Process.Start("explorer.exe", argument);
}
return outcome;
}
/// <summary>
/// Open Windows Explorer, in it open the directory or if
/// a file path is passed in, the directory in which the
/// file is located
/// </summary>
/// <param name="inputPath">Directory or file path</param>
public void OpenFileDirectory(string inputPath)
{
string path = System.IO.Path.GetDirectoryName(inputPath);
if (System.IO.Directory.Exists(path))
{
Process.Start(path);
}
}
}
March 11, 2021
C# Windows File Explorer Openers
This class will Open Windows File Explorer and get it to open a directory and optionally select a specified file in the directory
March 4, 2021
Search File Contents with LinqPad
Searching the contents of some file or files in LinqPad (a line at a time) in C# or even just finding a file:
A similar one but this uses a LinqPad HyperLinq object to use Notepad++ to open the file at the given line number.
Directory.EnumerateFiles(
@"C:\Path\To\Search\Directory\", // Target of search
"*.txt", // Specify file or files to search
SearchOption.AllDirectories).
// SearchOption.AllDirectories - recusively search subdirectories
// SearchOption.TopDirectoryOnly - search specified directory only
// Next line records a line of text, the line number, and the file
SelectMany(file => File.ReadAllLines(file).Select((text,n) => new {text,lineNumber=n+1,file})).
// Here we search the text
// Use Regex for the search OR use string methods Contains(), StartsWith, EndsWith ...
Where(line => Regex.IsMatch(line.text, @"Searching for this text", RegexOptions.IgnoreCase)
&& line.text.Contains("ERROR") ).
Dump("Matches found")
When debugging you can always use Skip() and Take() to reduce the number of lines searched.A similar one but this uses a LinqPad HyperLinq object to use Notepad++ to open the file at the given line number.
// https://npp-user-manual.org/docs/command-prompt/
var notepadppPath = @"C:\Program Files (x86)\Tools\Notepad++\notepad++.exe";
Directory.EnumerateFiles(
@"C:\Repos\", // Directory
"*.csproj", SearchOption.AllDirectories) // File names
.SelectMany(file => File.ReadAllLines(file).Select((text, n) =>
new
{
file = new Hyperlinq(() => Process.Start(notepadppPath,
file+" -n"+(n+1).ToString()), file),
lineNumber = n + 1,
text
}))
.Where(x => // WHat you are looking for in the file
// Regex.IsMatch(line.text, @"^.*tlpNotifySystemShutdown.*$"))
x.text.Contains("DownloadProcess.Contracts") // 1.0.1
|| x.text.Contains("Foobar.Client") // 13.15.0
|| x.text.Contains("DownloadProcess.Client") // 1.2.0
|| x.text.Contains("XxxZipCreator.") // 5.1.0
|| x.text.Contains("Sloopy.Crial.Messages") // 1.6.3
)
.Dump("Matches found");
Here is another example:
Directory.EnumerateFiles(
@"C:\Path\To\Search\Directory\",
"*.cs", SearchOption.AllDirectories)
.SelectMany(file => File.ReadAllLines(file).Select((text, n) => new { text, lineNumber = n + 1, file }))
.Where(line => line.text.Contains("[CallerMemberName"))
.Dump("Matches found")
Subscribe to:
Comments (Atom)