0

images[]指定されたディレクトリのフルパスを持つ画像ファイル名を保持する配列を割り当てています。

string[] images = DirLoad.FileNamesArray(
                                          IO.Loaders.PathType.full, 
                                          IO.Loaders.FileExtension.jpg
                                        );

...これで、images[]必要なすべてのファイル名が保存されます。これを実行するにはフルパスを使用する必要があったためです

を使用してDirectory.GetFiles()

次のアクションでは、ローカルファイル名としてそれを必要とします。

(その後、それぞれが文字列型パラメーターとして別のメソッドに渡されます)

だから私の質問は:

最初の部分を省略するにはどうHttpRuntime.AppDomainAppPathすればよいですか-...配列のすべての要素で同じである場合はどうすればよいですか?

これは使用例です。文字列は、のcurrentDir各要素からトリミングする必要があります。images[]

    public class IO
    {
        public class Loaders
        {
            readonly string currentDir = HttpRuntime.AppDomainAppPath;

            public string selecedDirName { get; set; }
            /// <summary>
            /// assign The Loaders.selectedDir First before calling
            /// </summary>
            /// <param name="foldertoLoad"></param>
            /// <returns></returns>
            public enum PathType
            {
                full, local
            }
            public enum FileExtension
            {
                jpg,png,txt,xml,htm,js,aspx,css
            }
            public string[] FileNamesArray(PathType SelectedPathMode, FileExtension selectedfileType)
            {
                string thisFolder = "";
                string thatFileType= string.Format("*.{0}",selectedfileType.ToString());
                switch (SelectedPathMode)
                {
                    case PathType.full:
                        thisFolder = Path.Combine(currentDir, selecedDirName);
                        break;
                    case PathType.local:
                        thisFolder = selecedDirName;
                        break;
                    default:
                        break;
                }

                string[] foundArr = Directory.GetFiles(thisFolder, thatFileType);
                return foundArr;
            }
        }

    }

更新、これは私が試したものです

string fileName;
string[] images = DirLoad.FilesArray(IO.Loaders.PathType.full, IO.Loaders.FileExtention.jpg);
        foreach (var currImage in images)
        {
              int startingAt = DirLoad.currentDir.Length ;
              int finalPoint = currImage.Length - startingAt;
              fileName = new String(currImage.ToCharArray(startingAt, finalPoint));
              baseStyle.Add(string.Format("{0}url({1}) {2}", BackGroundCssProp, fileName, imageProps));
        }

        return baseStyle.ToArray();
4

3 に答える 3

1

私はあなたが正確に何を必要としているのか完全にはわかりません。あなたの文章について:

文字列はcurrentDirです。images[]の各要素からトリミングする必要があります。

LINQを使用して次のことを試すことができます。

string currDir = "SomeString";
string[] images = new string[] { "SomeStringabc1.jpg", "SomeStringabc2.jpg", "SomeStringabc3.jpg", "abc.jpg" };
string[] newImages = images.Select(r => r.StartsWith(currDir) 
                                                ? r.Replace(currDir, "") : r)
                            .ToArray();

またはstring.TrimStartを使用します

string[] newImages = images.Select(r => r.TrimStart(currDir.ToCharArray())).ToArray();
于 2012-12-24T04:47:26.450 に答える
1

申し訳ありませんが、私にはわかりません...パス全体のファイル名のみが必要な場合は、Splitを使用して、パス全体を特殊文字で分割し、最後の配列要素を使用できます。

「画像」配列のすべてのパスを取得したら、以下のコードを試すことができます。

例えば:-

    for(i=0;i<images.length;i++)
    {
     string [] cuttofilename=images[i].split('\');
     string filename=cuttofilename[cuttofilename.lentgh-1];
    }
于 2012-12-24T06:01:20.547 に答える
1

それでも、最初から最後まで何を達成しようとしているのか理解できませんが、フルパスの配列があり、これらのパスからファイル名のみを取得する必要がある場合は、次のように実行できます。

実際filesには、ランダムでまったく異なるパスが含まれている可能性がありますが、質問から得たものによると、次のようになります。

var files = Directory.GetFiles(@"path"); 

次に、Path.GetFileNameメソッドを使用して、単純なEnumerable.SelectLINQステートメントを介してこれらのパスからファイル名のみを取得できます。

var fileNamesOnly = files.Select(f => Path.GetFileName(f));
于 2012-12-24T06:13:05.717 に答える