Проблема с записью файла из приложения Silverlight

#c# #silverlight

#c# #silverlight

Вопрос:

Посмотрите на следующий код (это часть приложения Silverlight):

 SaveFileDialog dialog = new SaveFileDialog();
dialog.Filter = "JSON Files|*.json|All Files (*.*)|*.*";
dialog.DefaultExt = "json";
if (dialog.ShowDialog() == true) {
    string filename = dialog.SafeFileName;
    System.IO.StreamWriter sw = 
        new System.IO.StreamWriter(new FileStream(filename,FileMode.Create));
    sw.Write("string");
    sw.Flush();
    sw.Close();
}
  

Это работает (создает файл и записывает туда «строку») на компьютере разработчика, но ничего не делает на моем компьютере, файл вообще не создается.

Есть идеи, что это может быть?! Заранее благодарю вас!

P.S. Мы попытались удалить sw.Flush(); , но это не помогло. Также мы пытались установить для автозапуска значение true — тоже не помогло. Изменение FileMode.Create на FileMode.Append также не имеет эффекта.

Ответ №1:

Попробуйте это:

         SaveFileDialog dialog = new SaveFileDialog();
        dialog.Filter = "JSON Files|*.json|All Files (*.*)|*.*";
        dialog.DefaultExt = "json";
        if (dialog.ShowDialog() == true) {
            System.IO.StreamWriter sw = new System.IO.StreamWriter(( Stream )dialog.OpenFile());
            sw.Write("string");
            sw.Close();
        }
  

Ответ №2:

Это проблема безопасности, вам нужно использовать filestream, который возвращается SaveFileDialog. Используйте его для открытия потока и записи.

Сохранить файловый каталог.OpenFile()

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

1. хм, и почему тогда на компьютере разработчика все в порядке?

2. @Eugeny89 потому что вы являетесь владельцем процесса. Выполняется отладка с использованием встроенного веб-сервера cassini. Если вы опубликуете его в IIS на своем локальном компьютере, он перестанет работать.

3. Я удалил свой ответ, поскольку вы правы, они находятся в разных пространствах имен, вы в своем ответе ссылались на пространство имен Windows forms, что сбило меня со следа.

4. @BenCr Извините за путаницу. Теперь я переключил ссылку, чтобы она указывала на ссылку с примером Silverlight, чтобы убедиться, что это больше не повторится.