2013-03-16 3 views
2

Как я могу прочитать все мои имена файлов aspx, которые у меня есть в моем проекте? Мне нужно собрать коллекцию моих файлов aspx.Получить коллекцию файлов aspx из моего проекта

Я хочу добавить их в DropDownList.

Как

foreach(ASPX file in myProject.aspx.collections) { 
    dropdownlist1.Items.Add(file.name);//Name could be: Default.aspx 
} 

Спасибо заранее.

Редактировать: Спасибо, друзья, действительно все ваши ответы были верны. Наконец я сделал это следующим образом:

string sourceDirectory = Server.MapPath("~/"); 
DirectoryInfo directoryInfo = new DirectoryInfo(sourceDirectory); 
var aspxFiles = Directory.EnumerateFiles(sourceDirectory, "*.aspx", SearchOption.TopDirectoryOnly).Select(Path.GetFileName); 

foreach (string currentFile in aspxFiles) { 
    this.dropdownlist1.Items.Add(currentFile); 
} 
+0

с отражением, что вы пробовали? – gdoron

+0

FileNames like: Default.aspx – Poyson1

ответ

1

Вы можете прочитать файлы так же, как вы читали бы любые файлы из папки.

Просто вам нужно «новообращенные» ссылка виртуальной папки на физический:

http://forums.asp.net/t/1273264.aspx/1

Тогда вы можете просто использовать Directory.EnumerateFiles() с ASPX фильтром, чтобы получить все файлы.

+0

Это простая и хорошая идея, я попытался преобразовать из виртуальной папки в физическую и использовать Directory.EnumerateFiles(), а также с помощью Directory.GetFiles(); в обоих случаях я получаю полную информацию о файле, такую ​​как C: \ inetpub \ wwwroot \ projectfolder \ Default.aspx. Но мне просто интересно получить только имя (Default.aspx). В любом случае, благодарю вас Хедриан. – Poyson1

+0

@ Poyson1: Если вы хотите только имя файла, используйте 'Path.GetFilename (fullPath)'. –

+0

Извините невежество моему другу, просто нужно было добавить метод Select (Path.GetFileName) после Directory.EnumerateFiles(). – Poyson1

1

Попробуйте это:

var dirPath = Server.MapPath("~/"); 
var ext = new List<string> {".aspx"}; 
var fileList = Directory.GetFiles(dirPath, "*.*", SearchOptions.AllDirectories) 
    .Where(s => ext.Any(ex => s.EndsWith(ex)); 

dropdownlist1.DataSource = fileList; 
dropdownlist1.DataBind(); 

Только для имен файлов делают это

foreach(string file in fileList) 
dropdownlist1.Items.Add(Path.GetFileName(file)); 
+0

Hi rs. Спасибо за ваш ответ, но если я использую этот фрагмент, я получу полную информацию о файле, как я уже говорил (C: \ inetpub \ wwwroot \ projectfolder \ Default.aspx.), И мне просто нужно имя (default.aspx) – Poyson1

+0

@ Poyson1 проверить обновленный ответ –

2

С отражением, это должно работать:

public static IEnumerable<string> getAspxNames() 
{ 
    var pageTypes = Assembly.GetExecutingAssembly().GetTypes() 
     .Where(t => t.BaseType == typeof(Page)); 
    return pageTypes.Select(t => t.Name).ToList(); 
} 

// ... 
foreach(string pageName in getAspxNames()) 
    dropdownlist1.Items.Add(pageName + ".aspx"); 
+0

Привет Тим, я проверил ваш фрагмент, но я не знаю, почему я просто получаю 3 файла из моего проекта, и у меня есть 7 страниц (aspx-файлы) ... – Poyson1

+0

@ Poyson1: Я не знаю, почему вы пропустили 4 типа страниц. Вы уверены, что эти типы объявлены в этой сборке и что они не наследуют друг от друга (что может быть проблемой в вышеприведенном коде), так что они фактически наследуют непосредственно от 'Page' (например, нет мастер-страницы, ashx или usercontrol)? –

+0

Нет, это простой проект с одной мастер-страницей и 7 aspx, так или иначе я решил это, как я описал выше. Большое спасибо моему другу. – Poyson1

Смежные вопросы