views:

63

answers:

3

Hello,

Let’s take this string has an example:

D:/firstdir/Another One/and 2/bla bla bla/media/reports/Darth_Vader_Report.pdf

I want to cut the first part of the path:

D:/firstdir/Another One/and 2/bla bla bla

And replace it with **../**, and keep the second part of the path (media/reports/Darth_Vader_Report.pdf)

If I knew the length or size of it, I could use the Replace or Substring. But since the first part of the string is dynamic, how can I do this?


Update

After StriplingWarrior question, I realized that I could have explained better.

The objective is to replace everything behind /media. The “media” directory is static, and will always be the decisive part of the path.

+3  A: 

You could do something like this:

string fullPath = "D:/firstdir/Another One/and 2/bla bla bla/media/reports/Darth_Vader_Report.pdf"
int index = fullPath.IndexOf("/media/");
string relativePath = "../" + fullPath.Substring(index);

I haven't checked it, but I think it should do the trick.

Nailuj
Normally, I go for the `Regex` solution, but I'm going to side with a simple `.IndexOf(...)` this time. +1
Brad
This is prone to some gotchas, like the word "Intermediate" somewhere before the "media" you are looking for. You might want to use LastIndexOf. Much would depend on how much of the string you can depend on; so far we only know about "media".
Jason
@Jason: It isn't perfect. But I don't think it would match the word "Intermediate", since I check for the index of "/media" - i.e. including the slash. I'll also update my answer to check for "/media/", which should make it even a bit safer.
Nailuj
@Nailuj Since you solution worked well to, I decided to give you a +1.But at the end of the day, I decied to use Homam solution.Thank you anyway :)
Marco
+3  A: 

Use Regular Expressions:

Regex r = new Regex("(?<part1>/media.*)");
var result = r.Match(@"D:/firstdir/Another One/and 2/bla bla bla/media/reports/Darth_Vader_Report.pdf");
if (result.Success)
{
    string value = "../" + result.Groups["part1"].Value.ToString();
    Console.WriteLine(value);
}

Good luck!

Homam
Great!That did it!! :) Thank you so much.
Marco
You're welcome :)
Homam
A: 

I would write the following regex pattern,

String relativePath = String.Empty;
Match m = Regex.Match("Path", "/media.*$");
if (m.Success)
{
relativePath = string.Format("../{0}", m.Groups[0].Value);
}
A_Nablsi