كيف ينبغي أن تنظيم الملفات للقراءة فقط لمشاريع محددة في ج #

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

  •  05-07-2019
  •  | 
  •  

سؤال

وبلدي مستقل الشريك الأصغر C # المشروع يتطلب عددا المعتدل (كاليفورنيا 100) من الملفات (XML) وهي مطلوبة لتوفير قيم مجال معين في وقت التشغيل. لا يطلب منهم أن تكون واضحة للمستخدمين. ومع ذلك سأعطي تحتاج إلى إضافة لهم أو تحديثها من حين لآخر وأنا على استعداد للقيام يدويا (أي أنا لا أتصور أداة محددة، خاصة وأنها قد تنشأ خارج النظام).

وأود لها أن تكون نقل الى مكان آخر (أي استخدام أسماء النسبية). ما هي الخيارات التي يجب أن تنظر لتنظيمها وماذا سيكون المكالمات المطلوبة لفتح وقراءتها؟

وهذا المشروع هو مستقل أساسا (لا علاقة لخدمات الويب، وقواعد البيانات، أو غيرها من تطبيقات الطرف الثالث). ويتم تنظيم ذلك إلى عدد صغير من مساحة الأسماء وكل منطق للملفات يمكن أن يقتصر على مساحة اسم واحد.

و========= أنا آسف لكونه غير واضح. ساحاول مرة اخرى. في تطبيق جافا فمن الممكن أن تشمل ملفات الموارد التي تقرأ بالنسبة إلى classpath، وليس إلى المباراة النهائية * إكس. أعتقد أن هناك وسيلة لفعل شيء مماثل في C #.

و========= أعتقد أنني يجب أن تستخدم سومثينغ المتعلقة RESX. انظر (ملفات RESX والبيانات أكس 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"))

وأنا ما زلت غير الواضح ما إذا كانت لديك أشكال وين، أو مشروع على شبكة الإنترنت ... وبغض النظر، واستخدام أسماء الملفات النسبية غير مطلوب أن يكون لهم نقل الى مكان آخر. أود أن أقترح إضافة إدخال في الملف web.config أو القسم appSettings ملف 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