2015-02-19 2 views
2

У меня есть следующий метод C#, который извлекает все файлы в папке, и используется в приложении ASP.NET и называется, сделав вызов AJAX через JavaScript:Извлечь все файлы из папки на стороне сервера

public string GetSoundFile(string pSoundFolder) 
    { 
     string[] pFiles = Directory.GetFiles(pSoundFolder); 

     string pFileList = ""; 

     for (int ii = 0; ii < pFiles.Length; ii++) 
     { 
      if (pFileList == "") 
      { 
       pFileList = pFiles[ii]; 
      } 
      else 
      { 
       pFileList += "|" + pFiles[ii]; 
      } 
     } 

     return (pFileList); 
    } 

и называется, выполнив следующие действия:

oGetSoundFilesJAXHandler.call("C:\\Projects\\"); 

Из того, что я понимаю, линии

string[] pFiles = Directory.GetFiles(pSoundFolder); 

используется для локальных файлов?

Приложение будет запущено на стороне клиента и потребуется получить доступ к папке на стороне сервера. Если я прав, то мой метод не может быть адаптирован для выполнения задачи, в которой я нуждаюсь.

Я пробовал:

 oGetSoundFilesJAXHandler.call("~//Projects//"); 

Но это не возвращает список файлов.

Я попытался найти способ достижения своей цели, но я ничего не смог найти. Возможно, я не использую правильные ключевые слова в моем поиске, поэтому даже подсказки ключевых слов будут очень признательны.

+0

_ "Из того, что я понимаю, строка: Строка [] pFiles = Directory.GetFiles (pSoundFolder); используется для локальных файлов" _ Если _local_ означает стороне клиента, нет, ASP.NET является серверный язык. Вы не получите файлы из файловой системы клиента. Это будет серьезным недостатком безопасности. –

+1

Кроме того, это должен быть правильный путь, а не виртуальный путь. Вы могли бы сделать ~ // Projects, но сначала вы должны передать эту строку в Server.MapPath, чтобы получить фактический физический путь, который он представляет, а затем передать его в каталог .GetFiles. Кроме того, убедитесь, что вы проверяете Directory.Exists() перед вызовом getfiles, чтобы убедиться, что каталог действительно существует, поэтому вы не получаете ошибок. –

ответ

2

Вы можете упростить это, используя следующий код.

public string GetSoundFile() 
{ 
    var files = Directory.GetFiles(HttpContext.Current.Server.MapPath("~/sounds")); 
    return String.Join("|",files); 
} 
0

Если ваша функция вызывает «oGetSoundFilesJAXHandler.call» на сервере, она сможет получить данные. Но если эта функция запущена на вашей локальной машине, это не сработает.

Для этого вам необходимо предоставить доступ к папке, к которой вы хотите получить доступ на сервере, и ее путь, используя адрес IP-адреса сервера, должен быть предоставлен для доступа к нему.

Его просто вопрос доступа для вашего клиента к папкам сервера.

0

Я сам нашел ответ.

мне нужно использовать

public string GetSoundFile() 
    { 
     string WorkingDirectory = HttpContext.Current.Server.MapPath("~/sounds");      

     string[] pFiles = Directory.GetFiles(WorkingDirectory); 

     string pFileList = ""; 

     for (int ii = 0; ii < pFiles.Length; ii++) 
     { 
      if (pFileList == "") 
      { 
       pFileList = pFiles[ii]; 
      } 
      else 
      { 
       pFileList += "|" + pFiles[ii]; 
      } 
     } 

     return (pFileList); 
    } 

мне нужно использовать:

HttpContext.Current.Server.MapPath("~/sounds"); 

Чтобы перейти в папку правильно.

Поскольку папка не изменяется, я добавил ее непосредственно к методу, но мог так же легко передать ее как строку.

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