Here and here I gave examples on how to get the exe path, but sometimes that is not enough, sometimes I need to find path of our class library, for example, that is why sometimes I need Directory.GetCurrentDirectory()
Here is one my tool to copy files which are listed in a file, and copy them to a location but keep original path tree. Usefull for TortoiseSVN usually I do it when I need to create the patch but I also want to be sure that if patch doesn't work that I have at least some kind of backup.
For example, you want to save files from c:\folder\subfolderOne\file1.txt and c:\folder\subfolderTwo\file1.txt to c:\copyFolder and to keep structure like c:\copyFolder\subfolderOne\file1.txt and c:\copyFolder\subfolderTwo\file1.txt
Here is the code:
using System;
using System.IO;
namespace CopyFilesKeepPathStructure
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Root source path");
string rootSourcePath = Console.ReadLine();
//string rootSourcePath = @" c:\folder";
Console.WriteLine("Root destination path");
string rootDestinationPath = Console.ReadLine();
//string rootDestinationPath = @"c:\copyFolder";
Console.WriteLine($"File with list of files to be copied:");
string fileWithListOfFilesToBeCopied = Console.ReadLine();
if (!(fileWithListOfFilesToBeCopied is null) && !(rootSourcePath is null))
{
string[] listOfSourceFiles = File.ReadAllLines(fileWithListOfFilesToBeCopied);
//string[] listOfSourceFiles = File.ReadAllLines(@"C:\files.txt");
foreach (string sourceFile in listOfSourceFiles)
{
string folderStructure = sourceFile.Substring(rootSourcePath.Length,
sourceFile.Length - rootSourcePath.Length);
string destinationFile = rootDestinationPath + folderStructure;
Directory.CreateDirectory(Path.GetDirectoryName(destinationFile) ?? string.Empty);
File.Copy(sourceFile, destinationFile, true);
Console.WriteLine($"Source: {sourceFile}, destination: {destinationFile}");
}
}
Console.WriteLine($"Press any key...");
Console.ReadKey();
}
}
}
One example how to create URI with HTTP protocol. If we have like "www.milosev.com" and link is "2015-01-23-20-08-55/gallery", then safest way is to do it like:
Uri domain = new UriBuilder("milosev.com").Uri;
if (Uri.TryCreate(domain, "2015-01-23-20-08-55/gallery", out Uri myUri))
{
Console.WriteLine(myUri.AbsoluteUri);
}