Как я могу использовать IndexOf, чтобы выбрать конкретного персонажа, если их несколько? - PullRequest
0 голосов
/ 13 апреля 2010

Как я могу использовать IndexOf с SubString, чтобы выбрать определенный символ, если их несколько? Вот моя проблема. Я хочу взять путь "C: \ Users \ Jim \ AppData \ Local \ Temp \" и удалить часть "Temp \". Оставив только «C: \ Users \ Jim \ AppData \ Local \» Я решил свою проблему с помощью приведенного ниже кода, но это предполагает, что папка «Temp» на самом деле называется «Temp». Есть ли способ лучше? Спасибо

if (Path.GetTempPath() != null) // Is it there?{
tempDir = Path.GetTempPath(); //Make a string out of it.
int iLastPos = tempDir.LastIndexOf(@"\");
if (Directory.Exists(tempDir) && iLastPos > tempDir.IndexOf(@"\"))
{
    // Take the position of the last "/" and subtract 4.
    // 4 is the lenghth of the word "temp".
    tempDir = tempDir.Substring(0, iLastPos - 4);
}}

Ответы [ 4 ]

7 голосов
/ 13 апреля 2010

Лучше использовать Directory.GetParent() или DirectoryInfo.Parent:

using System;
using System.IO;

class Test
{
    static void Main()
    {
        string path = @"C:\Users\Jim\AppData\Local\Temp\";
        DirectoryInfo dir = new DirectoryInfo(path);
        DirectoryInfo parent = dir.Parent;
        Console.WriteLine(parent.FullName);
    }    
}

(Обратите внимание, что Directory.GetParent(path) просто дает вам каталог Temp, поскольку он не понимает, что путь уже должен быть каталогом.)

Если вы действительно хотите использовать LastIndexOf, используйте перегрузку, которая позволяет указать начальное местоположение .

2 голосов
/ 13 апреля 2010

Почему бы просто не обработать это напрямую с помощью системных классов?

string folder = Environment.GetFolder(Environment.SpecialFolder.LocalApplicationData);
1 голос
/ 13 апреля 2010

Другие ответчики показали лучший способ для достижения вашей цели. В целях дальнейшего расширения ваших знаний, я предлагаю вам в общем взглянуть на регулярные выражения для соответствия строк и их замены.

Я провел первые пару лет моей карьеры программиста-самоучки, выполняя самые запутанные из возможных манипуляций со строками, прежде чем понял, что кто-то другой уже решил все эти проблемы, и я взял копию Освоение регулярных выражений . Я настоятельно рекомендую это.

Один из способов удалить последний каталог - использовать следующее регулярное выражение:

tempDir = Regex.Match(tempDir, @".*(?=\\[^\\]+)\\?").Value;

Это может выглядеть загадочно, но это фактически удалит последний элемент из пути, независимо от его имени и независимо от того, есть ли еще \ в конце.

0 голосов
/ 13 апреля 2010

Я бы использовал класс DirectoryInfo.

DirectoryInfo tempDirectory = new DirectoryInfo(Path.GetTempPath());            
DirectoryInfo tempDirectoryParent = tempDirectory.Parent;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...