0

複数の文字がある場合に、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

4 に答える 4

7

より良い方法は、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ただし、本当に使用したい場合は、開始位置を指定できるオーバーロードを使用してください

于 2010-04-13T19:19:58.670 に答える
2

Systemクラスを使用してこれを直接処理しないのはなぜですか?

string folder = Environment.GetFolder(Environment.SpecialFolder.LocalApplicationData);
于 2010-04-13T19:21:45.883 に答える
1

他の回答者は、あなたの目標を達成するための最良の方法を示しています。知識をさらに広げるために、一般的に、文字列の照合と置換のニーズについて正規表現を確認することをお勧めします。

独学のプログラミングキャリアの最初の数年間は、他の誰かがすでにこれらすべての問題を解決していることに気付く前に、想像できる最も複雑な文字列操作を行っていました。そして、MasteringRegularExpressionsのコピーを手に入れました。強くお勧めします。

最後のディレクトリを削除する1つの方法は、次の正規表現を使用することです。

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

不可解に見えるかもしれませんが、これにより、名前に関係なく、また最後に別のアイテムがあるかどうかに関係なく、パスから最後のアイテムが実際に削除さ\れます。

于 2010-04-13T19:41:21.863 に答える
0

DirectoryInfoクラスを使用します。

DirectoryInfo tempDirectory = new DirectoryInfo(Path.GetTempPath());            
DirectoryInfo tempDirectoryParent = tempDirectory.Parent;
于 2010-04-13T19:21:57.160 に答える