This is something I do frequently, and I always forget the streaming syntax, so here it is. There are couple of ways to do this. Firstly, from an application:
- From the properties panel, set the Build Action as Resource and the Copy to Output Directory as Copy Always
- From code this can then be accessed with:
public class ListOfStrings: List
{
//@ctor
public ListOfStrings()
{
string line;
StreamResourceInfo sri = App.GetResourceStream(new Uri("Namespace;component/filename.txt", UriKind.Relative));
using (TextReader tr = new StreamReader(sri.Stream))
{
while ((line = tr.ReadLine()) != null)
{
Add(tr.ReadLine());
}
}
}
}
NOTE: Namespace;component/filename.txt: the Namespace and filename have to be replaced. Leave in the component syntax
In a class library, it is slightly different.
- From the properties panel, set the Build Action as Embedded Resource
- From code this can then be accessed with:
public class ListOfStrings: List
{
//@ctor
public ListOfStrings()
{
string line;
Assembly assembly = Assembly.GetExecutingAssembly();
Stream stream = assembly.GetManifestResourceStream("Namespace.ResourceFolder.Filename.txt");
using (TextReader tr = new StreamReader(stream))
{
while ((line = tr.ReadLine()) != null)
{
Add(tr.ReadLine());
}
}
}
}
NOTE: Namespace.ResourceFolder. has to be replaced with a suitable value.
Obviously, both examples return at list of string objects, one object per line.
Leave a Reply