#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 должна представлять собой сборку со строгим именем. Приведенные ниже снимки показывают, как добавить строгое имя к сборке.
Комментарии:
1. Привет, я делаю что-то не так. Я создал две winforms, одну для записи Settingsdata, вторую для получения Settingsdata и библиотечный класс с вашим кодом. Первый работает хорошо и создает новую папку с XML-файлом, но второй не может прочитать эту папку, у меня ошибка: System.IO.DirectoryNotFoundException. Должен ли я что-то сделать с этими winforms, чтобы использовать ту же папку?
2. Я видел, что когда я запускаю вторую winform, она создает новую папку в isolatedstorage (вместо использования той же папки, что и первая winform)
3. Библиотека dll, в которую вы добавили мой код, должна иметь строгое название assembly. Смотрите прикрепленный снимок под редактированием в моем ответе.