Общий код для хранения файлов в IsolatedStorage - PullRequest
0 голосов
/ 01 апреля 2011

У меня есть HTML-файл, содержащий изображения, которые размещены в локальном расположении. Для чтения этих изображений я использую изолированное хранилище. Но при хранении изображений в изолированном хранилище мне нужно указать имя файла, которое делает мой код специфичным для этих имен файлов . Например: у меня есть два изображения abc.jpg и xyz.jpg, но когда эти имена изменяются на abc1.jpg и xyz1.jpg, возникает ошибка. Что можно использовать для написания общего кода, не зависящего от имен файлов?

Ответы [ 2 ]

1 голос
/ 01 апреля 2011

Я делаю это так:

internal static T LoadFile<T>(string folderName, string filePrefix) where T : class
{
    string fileStreamName = string.Format("{0}\\{1}.dat", folderName, filePrefix);
    return LoadFile<T>(fileStreamName);
}

internal static T LoadFile<T>(string fileStreamName) where T : class
{
    T retval = default(T);

    if (IsoStore.FileExists(fileStreamName))
    {
        using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(fileStreamName, FileMode.OpenOrCreate, IsoStore))
        {
            if (stream.Length > 0)
            {
                DataContractSerializer dcs = new DataContractSerializer(typeof (T));
                retval = dcs.ReadObject(stream) as T;
            }
        }
    }

    return retval;
}
0 голосов
/ 01 апреля 2011

Возможное решение:

Вы можете использовать файл ресурсов для хранения этих файлов в вашем xap - используя Файл | Новый -> Файл ресурсов, затем используя Ресурс -> Добавить существующий файл.

Как только вы это сделаете, файл ресурсов автоматически сгенерирует открытое свойство для каждого ресурса (типа string для текстовых файлов и типа byte [] для двоичных файлов).

Вы можете перечислить эти публичные свойства, используя Reflection - что-то вроде:

    foreach (PropertyInfo pi in MyResources.GetType().GetProperties())
    {
        string propertyName = pi.Name; // the name of your resource
        object propValue = pi.GetValue(o, null); // the value of your resource

        // put your save code here - you might need to use some naming conventions to work out file extensions
    }
...