Как я должен организовать файлы, доступные только для чтения для конкретного проекта, на c#

StackOverflow https://stackoverflow.com/questions/1205872

  •  05-07-2019
  •  | 
  •  

Вопрос

Мой автономный небольшой проект на C # требует умеренного количества (около 100) файлов (XML), которые необходимы для предоставления значений, специфичных для домена, во время выполнения.Они не обязаны быть видимыми для пользователей.Однако мне нужно будет время от времени добавлять к ним или обновлять их, что я готов делать вручную (т.е.Я не рассматриваю конкретный инструмент, тем более что они могут быть созданы вне системы).

Я бы хотел, чтобы их можно было перемещать (т.е.использовать относительные имена файлов).Какие варианты я должен рассмотреть для их организации и какие вызовы потребуются для их открытия и чтения?

Проект по сути является автономным (не связанным с веб-сервисами, базами данных или другими сторонними приложениями).Он организован в небольшое количество пространств имен, и вся логика для файлов может быть ограничена одним пространством имен.

========= Я прошу прощения за то, что выразился неясно.Я попробую еще раз.В Java-приложении можно включать файлы ресурсов, которые считываются относительно пути к классу, а не к конечному *.exe.Я полагаю, что есть способ сделать нечто подобное в C #.

========= Я считаю, что мне следует использовать что-то, связанное с RESX.Смотрите (Файлы RESX и xml-данные https://stackoverflow.com/posts/1205872/edit).Я могу поместить строки в файлы resx, но это утомительно и подвержено ошибкам, и я бы предпочел скопировать их в соответствующее место.

Прошу прощения за неясность, но я не совсем уверен, как задать этот вопрос.

========= Вопрос, по-видимому, очень близок к (C # эквивалент getClassLoader().getResourceAsStream(...)).Я хотел бы иметь возможность добавлять файлы в VisualStudio - мой вопрос в том, куда мне их поместить и как мне указать, что они являются ресурсами?

Это было полезно?

Решение 3

Есть подробный ответ на http://www.attilan.com/2006/08/accessing_embedded_resources_u.php.Похоже, что файл должен быть указан как EmbeddedResource.У меня еще не получилось, чтобы это сработало, но это то, чего я хочу.

Другие советы

Если вы поместите их во вложенную папку относительно вашего исполняемого файла, скажем .\Config вы могли бы получить к ним доступ с помощью File.ReadAllText(@"Config\filename.xml").

Если у вас есть приложение ASP.NET , вы могли бы поместить их в специальный App_Data папку и получите к ним доступ с помощью File.ReadAllText(Server.MapPath("~/App_Data/filename.xml"))

Мне все еще неясно, есть ли у вас Win forms или веб-проект...Независимо от этого, использование относительных имен файлов не требуется для их перемещения.Я бы предложил добавить запись в раздел AppSettings вашего файла web.config или app.config, содержащую полный путь к вашим XML-файлам.Если они будут перемещены, все, что вам нужно сделать, это изменить свой конфигурационный файл.

<!-- app/web.config --->
<appSettings>
        <add key="filelocation" value="c:\xmlfiles"/>
</appSettings>

//c# code (in ASP.NET app, for example)
using System.IO;
using System.Xml.Linq;

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string path = ConfigurationManager.AppSettings["filelocation"];
        DirectoryInfo di = new DirectoryInfo(path);
        List<XDocument> xmlDocs = new List<XDocument>();
        foreach (FileInfo fi in di.GetFiles())
        {
            xmlDocs.Add(XDocument.Load(fi.FullName));
        }
    }
}

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

В вашем случае кажется вполне уместным поместить их в вашу папку App_Data, если у вас есть ASP.NET сайт (при условии, что он никогда не будет находиться более чем на одном сервере).Просто будьте осторожны, если вы укажете "~/App_Data" в своем конфигурационном файле, вы знаете, что нужно перевести это в полный путь, как дарин сделал с Server.MapPath().

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top