Как совместно использовать одно изолированное хранилище для двух приложений Windows Forms?

#c# #winforms #visual-studio-2010 #isolatedstorage

#c# #winforms #visual-studio-2010 #изолированное хранилище

Вопрос:

У меня есть два приложения Windows Forms и библиотека в одном решении.

Библиотечный класс может создавать новые папки и файлы в IsolatedStorage и перечислять все файлы и папки в IsolatedStorage.

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

Ответ №1:

Используйте IsolatedStorageFile.GetUserStoreForAssembly для создания изолированного хранилища из библиотеки.

Подробности здесь

Вы могли бы использовать приведенный ниже тип в своей библиотеке. И application1 и application2 могут выполнять запись / чтение в / из одного и того же изолированного хранилища с помощью приведенного ниже типа в вашей библиотеке.

Ниже:

  public class UserSettingsManager
    {
        private IsolatedStorageFile isolatedStorage;
        private readonly String applicationDirectory;
        private readonly String settingsFilePath;

        public UserSettingsManager()
        {
            this.isolatedStorage = IsolatedStorageFile.GetMachineStoreForAssembly();
            this.applicationDirectory = "UserSettingsDirectory";
            this.settingsFilePath = String.Format("{0}\settings.xml", this.applicationDirectory);
        }

        public Boolean WriteSettingsData(String content)
        {
            if (this.isolatedStorage == null)
            {
                return false;
            }

            if (! this.isolatedStorage.DirectoryExists(this.applicationDirectory))
            {
                this.isolatedStorage.CreateDirectory(this.applicationDirectory);
            }

            using (IsolatedStorageFileStream fileStream =
                this.isolatedStorage.OpenFile(this.settingsFilePath, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write))
            using (StreamWriter streamWriter = new StreamWriter(fileStream))
            {

                streamWriter.Write(content);
            }

            return true;
        }

        public String GetSettingsData()
        {
            if (this.isolatedStorage == null)
            {
                return String.Empty;
            }

            using(IsolatedStorageFileStream fileStream =
                this.isolatedStorage.OpenFile(this.settingsFilePath, System.IO.FileMode.Open, System.IO.FileAccess.Read))
            using(StreamReader streamReader = new StreamReader(fileStream))
            {
                return streamReader.ReadToEnd();
            }
        }
    }
  

Редактировать:

Библиотека dll должна представлять собой сборку со строгим именем. Приведенные ниже снимки показывают, как добавить строгое имя к сборке. Перейдите в свойства проекта

На вкладке Подпись в свойствах нажмите на выпадающий элемент quot;Создатьquot; и укажите имя snk в диалоговом окне

Комментарии:

1. Привет, я делаю что-то не так. Я создал две winforms, одну для записи Settingsdata, вторую для получения Settingsdata и библиотечный класс с вашим кодом. Первый работает хорошо и создает новую папку с XML-файлом, но второй не может прочитать эту папку, у меня ошибка: System.IO.DirectoryNotFoundException. Должен ли я что-то сделать с этими winforms, чтобы использовать ту же папку?

2. Я видел, что когда я запускаю вторую winform, она создает новую папку в isolatedstorage (вместо использования той же папки, что и первая winform)

3. Библиотека dll, в которую вы добавили мой код, должна иметь строгое название assembly. Смотрите прикрепленный снимок под редактированием в моем ответе.