2015-12-06 2 views
0

Я честно занимался этим часами, и я до сих пор не нашел ничего близкого к тому, что я ищу.C# Как использовать папку в проекте

В основном я создал папку в своем проекте и назвал ее «Файлы». Затем я добавил много фактических файлов в эту папку, и теперь я хочу получить к ним доступ через пустоту, но я не могу получить их имена.

Я попытался отобразить файлы в окне сообщения (только для целей тестирования), так что я использовал это:

public static string[] GetResourceNames() 
    { 
     var asm = Assembly.GetEntryAssembly(); 
     string resName = asm.GetName().Name + ".Files"; 
     using (var stream = asm.GetManifestResourceStream(resName)) 
     using (var reader = new System.Resources.ResourceReader(stream)) 
     { 
      return reader.Cast<DictionaryEntry>().Select(entry => (string)entry.Key).ToArray(); 
     } 
    } 

Но все это делает возвращает ошибку говоря, читатель не может быть ноль.

Я пытаюсь показать в цикле Еогеасп как это:

foreach (string resourceName in GetResourceNames()) 
     { 
      MessageBox.Show(resourceName); 
     } 

но ничего не показывает.

То, что я пытаюсь сделать это:

Assembly assembly = Assembly.GetExecutingAssembly(); 
     int totalFiles = 17; 
     int currentFiles = 0; 
     foreach (var file in assembly.GetManifestResourceNames()) 
     { 
      string extractPath = functions.pathToExtract + @"\" + file; 

      using (Stream s = assembly.GetManifestResourceStream(file)) 
      using (BinaryReader r = new BinaryReader(s)) 
      using (FileStream fs = new FileStream(extractPath, FileMode.OpenOrCreate)) 
      using (BinaryWriter w = new BinaryWriter(fs)) 
       w.Write(r.ReadBytes((int)s.Length)); 
      currentFile.Invoke((MethodInvoker)delegate { currentFile.Text = "Installing : " + file + " (" + currentFiles + " out of "+ totalFiles + " installed)"; }); 
      currentFiles += 1; 
     } 

Это то, что я пытаюсь сделать, и это код успешно, но он записывает имена файлов: SolutionName.Files. FileName.Extension, и я только хочу, чтобы он записывался как FileName.Extension

Что я здесь делаю неправильно?

+0

@Shaamaan Да, файлы зарегистрированы в решении, и нет, они не находятся в окне ресурсов, я просто перетащил их в папку «Файлы» и поменял их действие «Построение» на «Встроенный ресурс», – Ghawn

ответ

0

Ну, файл ресурсов хранится в указанном формате: [Solution].[Folder].[File].[Extension].

Предполагая, что вы действительно хотите сделать это, удалите начальные [Solution].[Folder] из имен файлов, которые вы можете использовать только String.Replace.

Что-то вроде:

var fileName = file.Replace("[Solution].[Folder]", ""); 

Затем используйте fileName для currentFile.Text или extractPath. Помните, что я не знаю, что functions.pathToExtract + @"\" + file в вашем коде производит на данный момент, так что это немного догадка с моей стороны, но я думаю, что это создаст разумный путь, который можно было бы использовать для извлечения встроенных ресурсов.

+0

currentFile.text - это всего лишь метка, которая отображает, какой файл извлекается, который не меняет вывод файлов. – Ghawn

+0

@Ghawn. Вы можете просто использовать его для своей «extractPath». Я отредактировал ответ. – Shaamaan

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