2012-12-24 21 views
0

我將images[]分配給一個數組,該數組保存具有給定Directory的完整路徑的圖像文件名。使用Directory.GetFiles()的字符串操作

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(); 
+0

它;還不清楚對我來說,你」重新努力完成。然而它是'var fileNamesOnly = Directory.GetFiles(@「path」)。Select(f => Path.GetFileName(f));'?? – horgh

+0

@KonstantinVasilcov .. 它可能...沒有機會檢查它... – LoneXcoder

+0

@KonstantinVasilcov你可以請發佈一個答案,我已經更新了我的問題中的用法,你如何實現'Path.GetFile( )'在字符串? – LoneXcoder

回答

1

我還是不明白,你想什麼從開始到最後完成,但..如果你有一個完整的路徑陣列,你只需要從這些路徑獲取文件名,你可以執行以下操作:

其實files可能包含隨機的,完全不同的路徑,但根據我從這個問題等它是:

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

然後你可以使用Path.GetFileName Method從這些路徑檢索只有文件名,通過一個簡單的Enumerable.Select LINQ語句:

var fileNamesOnly = files.Select(f => Path.GetFileName(f)); 
+0

感謝您的回答,我會嘗試和學習更好,就像使用'LINQ'而不是傳統方法,它就像在jQuery和JavaScript我猜 – LoneXcoder

+0

至少LINQ值得被人知道。找時間學習它。這很容易(是的,它是),強大和有用的。 – horgh

1

我不完全確定你確實需要什麼。爲了您的一句話:

字符串是currentDir我需要從每個元素圖像修剪[]

你可以嘗試以下使用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(); 
+0

@LoneXcoder,你可以發佈你所擁有的樣本數組,以及在字符串操作後你想要的數組。 – Habib

+0

我就是這樣,它是如何與我的代碼,我想性能太... – LoneXcoder

+0

看看這裏在基準結束 http://www.dotnetperls.com/substring ,那是在這些完整路徑圖像,例如..'G:\ DevI5-Raid-0 \ Documents \ Visual Studio 2010 \ WebSites \ testddwsSettingsViaClassToList \ images \ 222EgplantLeatheLighterPattern.jpg' – LoneXcoder

1

抱歉,但我不清楚...如果你只想要文件名從整個路徑,那麼你可以簡單地使用它的Split,用特殊字符分割整個路徑並使用最後一個數組元素。

一旦你將得到你的「圖像」數組中的所有路徑,你可以嘗試下面的代碼。

例如: -

for(i=0;i<images.length;i++) 
    { 
    string [] cuttofilename=images[i].split('\'); 
    string filename=cuttofilename[cuttofilename.lentgh-1]; 
    } 
+1

我幾乎可以考慮所有選項,...因爲我沒有,我用可能的解決方案之一更新我的問題,除了@konstantin LINQ方法,我仍然不熟悉,雖然你的答案看起來很簡單...是「吻」仍然是一個座右銘或能夠驗證一些例外,如康斯坦丁的名單上有所有內置的安全檢查,我想問問什麼是最好的方法,就像你所做的一樣('保持'我' ''S'imple'S'tupid)我聽說過的一個古老術語,還是安全和複雜的更好? – LoneXcoder