2014-02-09 92 views
0

我有这样的代码:如何为每个目录创建主组目录名称?

foreach (var map in maps) 
{ 
    // This starts a new group 
    var downloadDirectory = Path.Combine(BaseDirectory, htmlFiles[groupId++]); 
    BackgroundWorkerConfiguration.urlsDirectories.Add(downloadDirectory); 
} 

BaseDirectory在此是:d:\测试\ ImagesDirectories
htmlFiles是一个列表包含35个指数法每个索引目录名
froypId为int。

例如在htmlFiles第一索引i看到:Sat24_Africa0 在索引1我看到:Sat24_Africa1 在索引i看到:Sat24_Africa2 。 。 在索引5我看到:Sat24_Asia0 在索引6我看到:Sat24_Asia1 。 。 。 。 等35个目录。

最终名单urlsDirectories是列表看起来像:

In index 0 i see: d:\test\ImagesDirectories\Sat24_Africa0 
In index 1 i see: d:\test\ImagesDirectories\Sat24_Africa1 
In index 2 i see: d:\test\ImagesDirectories\Sat24_Africa2 
. 

。 。 在索引33中我看到:d:\ test \ ImagesDirectories \ Sat24_South_america3

最后,我遍历这个List urlsDirectories并创建所有35个目录。

for (int i = 0; i < BackgroundWorkerConfiguration.urlsDirectories.Count; i++) 
{ 
    if (!Directory.Exists(Path.Combine(imagesDirectory, BackgroundWorkerConfiguration.urlsDirectories[i]))) 
    { 
     Directory.CreateDirectory(Path.Combine(imagesDirectory, BackgroundWorkerConfiguration.urlsDirectories[i])); 
    } 
} 

但不是创建基本目录,我想会有一个主目录首先为欧洲,然后在欧洲有子目录下35个目录:

非洲,亚洲,欧洲,中东,北美洲,大洋洲,南美洲

而且每个目录例如非洲有目录下:Africa0 Africa1 Africa2 ....

因此,它应该是这样的:

D:\test\ImagesDirectories\Europe\Africa\Africa0 
D:\test\ImagesDirectories\Europe\Africa\Africa1 
D:\test\ImagesDirectories\Europe\Africa\Africa2 
D:\test\ImagesDirectories\Europe\Africa\Africa3 
D:\test\ImagesDirectories\Europe\Africa\Africa4 

D:\test\ImagesDirectories\Europe\Asia\Asia0 
D:\test\ImagesDirectories\Europe\Asia\Asia1 
D:\test\ImagesDirectories\Europe\Asia\Asia2 
D:\test\ImagesDirectories\Europe\Asia\Asia3 
D:\test\ImagesDirectories\Europe\Asia\Asia4 

依此类推。现在我在urlsDirectories中的目录中拥有所有名称,但我如何解析它们以及如何制作目录组?

这是真正的我在BaseDirectory变量看:

C:\Users\bout0_000\AppData\Local\WeatherMaps\WeatherMaps\ImagesDirectory 

那么这是我在真正看到htmlFiles在索引0:

Sat24_Africa0 

这是我目前看到的在urls中的实际目录索引0中的目录:

C:\Users\bout0_000\AppData\Local\WeatherMaps\WeatherMaps\ImagesDirectory\Sat24_Africa0 

如何进行更改?

回答

1

你可以试试这个:

foreach (var map in maps) 
{ 
    // This starts a new group 
    var count = "Sat24_".Length; 
    var leafDirectory = htmlFiles[groupId++].Remove(0, count); // e.g. "Africa0" 
    var continent = Regex.Match(leafDirectory, @"[A-Za-z_]+").Value; // e.g. "Africa" 

    var downloadDirectory = Path.Combine(BaseDirectory, "Europe", continent, leafDirectory); 
    BackgroundWorkerConfiguration.urlsDirectories.Add(downloadDirectory); 
}