0

ログテキストファイルからさまざまなディレクトリパスを「取得」し、単語に応じてさまざまな結果を出力するプログラムがあります。

ディレクトリパスの例:

  • C:/ドキュメントと設定/すべてのユーザー/デスクトップ/ AccessDataFTK Imager.lnk

  • C:/ドキュメントと設定/すべてのユーザー/スタートメニュー/プログラム/ AccessData

  • C:/ドキュメントと設定/管理者/デスクトップ/ AccessDataFTK Imager.exe:Zone.Identifier

したがって、最後の「/」の後にファイルまたはフォルダーの名前をgrepで出力するにはどうすればよいですか?これは、プログラムがファイルとフォルダを識別するのに役立ちます。複数の「。」に注意してください。ディレクトリパス内にある空白。など"Imager.exe:Zone.Identifier"。したがって、使用するのは難しいif(!name.contains()".")

その他パスSTRINGから「AccessDataFTKImager.lnk」、「AccessData」、「AccessData FTKImager.exe:Zone.Identifier」を取得するにはどうすればよいですか。

誰かがこの問題を解決するための方法やコードについてアドバイスしてもらえますか?ありがとう!

コード:

if (!token[7].Contains("."))
                {    

                    Console.WriteLine("The path is a folder?");

                    Console.WriteLine(token[7]);

                    Console.WriteLine(actions);

                    MacActions(actions);

                    x = 1;
                } 
4

6 に答える 6

1

を使用しPath.GetFileNameます。

パスの最後のディレクトリ文字の後の文字。パスの最後の文字がディレクトリまたはボリューム区切り文字の場合、このメソッドはString.Emptyを返します。

于 2010-12-17T14:20:51.550 に答える
1

ファイルパスを操作する場合はPathクラスを使用し、実際のファイルとフォルダーを操作する場合はFileandDirectoryクラスを使用します。

string str1=@"C:/Documents and Settings/All Users/Desktop/AccessData FTK Imager.lnk";
string str2=@"C:/Documents and Settings/All Users/Start Menu/Programs/AccessData";
string str3=@"C:/Documents and Settings/Administrator/Desktop/AccessData FTK Imager.exe:Zone.Identifier";

Console.WriteLine(Path.GetFileName(str1));
Console.WriteLine(Path.GetFileName(str2));
Console.WriteLine(Path.GetFileName(str3));

出力:

AccessData FTK Imager.lnk
AccessData
Zone.Identifier <-- it chokes here because of the :

システムに特定のファイルやフォルダがないため、このクラスは文字列を操作します。AccessDataまた、それがフォルダであるか拡張子のないファイルであるかを判断することは不可能です。

私はいくつかの常識を使用して、拡張子が付いたすべてのものをファイル(Path.GetFileExtensionここで使用できます)として宣言し、その他すべてをフォルダーとして宣言することができます。または、(と)
を使用して、問題の文字列が実際に私のマシン上のファイルまたはフォルダであることを確認することもできます。File.ExistsDirectory.Exists

if (File.Exists(str2))
    Console.WriteLine("It's a file");
else if (Directory.Exists(str2))
    Console.WriteLine("It's a folder");
else
    Console.WriteLine("It's not a real file or folder");
于 2010-12-17T14:20:57.550 に答える
1

これは、プログラムがファイルとフォルダを識別するのに役立ちます

実際のファイルシステムにアクセスしない限り、パスがファイルまたはフォルダを表しているかどうかを判断する方法はありません。'Foo.exe'のようなディレクトリ名は完全に有効であり、拡張子のないファイル('Foobar')も有効です。

于 2010-12-17T14:23:27.853 に答える
1

あなたがしているように「/」でトークン化するのはどうですか...そうすれば、最後のトークンがファイルであり、それより前のトークンがパスであることがわかります。

于 2010-12-17T14:24:37.203 に答える
0

文字列全体を / で単純に分割できます

例えば:

string a="C:/Documents and Settings/All Users/Desktop/AccessData FTK Imager.lnk"; string[] words=a.split('/'); int len=words.length; これで、words[len] は最後のスラッシュ (/) の後のデータを返します。理解していただければ幸いです...

于 2010-12-17T14:26:43.967 に答える
0

ファイルの名前を表す文字列しか持っていないと思いますが、その場合は本当に確信が持てません。のような名前のフォルダを作成しても問題ありませんFolder.doc。そのため、実際のファイル システムにアクセスできない場合、チェックするのは困難です。次のような正規表現を使用すると、近づくことができます。

(.*\\)(.+)(\..*)

試してみてください: http://www.regexplanet.com/simple/index.html グループ番号 3 で出力が得られた場合、それはフォルダーではなくファイルである可能性があります。出力が得られない場合は、直後にこれを試してください:

(.*\\)(.+)(\..*)?

これにより、グループ 2 のフォルダーが表示されます。

于 2010-12-17T14:26:58.857 に答える