3

文字列に部分文字列を挿入するのに問題があります。文字列パスに挿入する必要が"/thumbs"あります

/media/pictures/image1.jpg

次のように、パスの最後の部分に/thumbs/を挿入します。

/media/pictures/thumbs/image1.jpg

linqで可能ですか?

4

5 に答える 5

4

パス操作のようなものについては、System.IO名前空間、特にPathオブジェクトを使用するのが最善です。次のようなことができます。

string path = "/media/pictures/image1.jpg";
string newPath = Path.Combine(Path.GetDirectoryName(path), "thumbs", Path.GetFileName(path)).Replace(@"\", "/");
于 2013-02-18T20:43:55.120 に答える
3

これを試してください。最後のスラッシュのインデックスを取得し、その時点に追加の文字列を挿入します。

なぜ反対票を投じるのかはわかりませんが、うまくいくことは保証します。

string original = "/media/pictures/image1.jpg";
string insert = "thumbs/";
string combined = original.Insert(original.LastIndexOf("/") + 1, insert);
于 2013-02-18T20:39:37.700 に答える
2

linqで可能ですか?

このプロセスにLinqを使用する必要はありません。String.Insert()メソッドを使用できます。

このインスタンスの指定されたインデックス位置に指定された文字列が挿入された新しい文字列を返します。

string s = "/media/pictures/image1.jpg";
string result = s.Insert(s.LastIndexOf('/'), "/thumbs");
Console.WriteLine(result);

出力;

/media/pictures/thumbs/image1.jpg

ここにデモがあります。

于 2013-02-18T20:42:49.020 に答える
1

と呼ばれるSystem.IOクラスを使用しますPath

これは、デモンストレーションのみを目的としたlong(er)バージョンです。

string pathToImage = "/media/pictures/image1.jpg";

string dirName = System.IO.Path.GetDirectoryName(pathToImage);
string fileName = System.IO.Path.GetFileName(pathToImage);
string thumbImage = System.IO.Path.Combine(dirName, "thumb", fileName);

Debug.WriteLine("dirName: " + dirName);
Debug.WriteLine("fileName: " + fileName);
Debug.WriteLine("thumbImage: " + thumbImage);

これがワンライナーです:

Debug.WriteLine("ShortHand: " + Path.Combine(Path.GetDirectoryName(pathToImage), "thumb", Path.GetFileName(pathToImage)));

次の出力が得られます。

dirName: \media\pictures
fileName: image1.jpg
thumbImage: \media\pictures\thumb\image1.jpg

ShortHand: \media\pictures\thumb\image1.jpg
于 2013-02-18T20:46:50.363 に答える
1

Pathクラスを、できれば独自のユーティリティ メソッドで、または拡張メソッドとして使用します。

string pathWithThumbs = Path.Combine(Path.Combine(Path.GetDirectoryName(path), "thumbs"), Path.GetFileName(path));

Linq はここでは場違いのようです。コレクションを実際にクエリしているわけではありません。さらに、このPathクラスは、ほとんどのスラッシュとコーナー ケースを自動的に処理します。

編集: @juharr が指摘したように、4.0 の時点で、さらに簡単にする便利なオーバーロードがあります。

string pathWithThumbs = Path.Combine(Path.GetDirectoryName(path), "thumbs", Path.GetFileName(path));

EDITx2:@DiskJunkyが指摘しているように、このパスの使用法は実際にはスラッシュをバックスラッシュに交換するのでReplace("\\", "/")、そこに呼び出しを投げるだけです.

于 2013-02-18T20:40:10.230 に答える