保存Windows Phone应用程序的用户信息

时间:2012-11-12 16:35:05

标签: c# silverlight windows-phone-7 isolatedstorage

我遇到了一些麻烦,不知怎的,我得到了一个“不允许的例外”,我似乎无法弄清楚出了什么问题我知道答案很简单,但我真的无法发现我的代码有什么问题。 .. 它发生在我尝试向新创建的文件写入内容时,我可以想象它也会在尝试读取文件时...任何信息都会被确认... thx提前

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; // ny
using System.Net;
using System.Collections.Specialized;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Tasks;
using Microsoft.Phone.Shell;
using System.IO; // ny
using System.IO.IsolatedStorage; // ny

namespace SmartSence
{
    public partial class MainPage : PhoneApplicationPage
    {
        private static UTF8Encoding enc = new UTF8Encoding();
        // Constructor
        public MainPage()
        {
            InitializeComponent();
            if (CreateStore().FileExists("Userdata\\Userdata.txt"))
            {
                mail.Text = ReadFile(CreateStore());
            }
        }


        private void minknap_Click(object sender, RoutedEventArgs e)
        {


            string newusername;
            newusername = Username.Text;
            mytext1.Text = newusername;

            string igen;
            igen = "&password=";

            string newpassword;
            newpassword = mypassword.Password;
            mypasswordblock.Text = newpassword;

            WebBrowserTask webBrowserTask = new WebBrowserTask();

            webBrowserTask.Uri = new Uri("http://www.smartsence.dk/winindexcheck.php?id=" + mytext1.Text + igen + mypasswordblock.Text, UriKind.Absolute);

            webBrowserTask.Show();


        }
        private void signin_Click(object sender, RoutedEventArgs e)
        {




            string signin;
            signin = mail.Text;
            signintext.Text = signin;

            string igen;
            igen = "&password=";

            string newpassword;
            newpassword = mail.Text;
            signintext.Text = newpassword;

            if (!CreateStore().DirectoryExists("Userdata"))
            {

                CreateStore().CreateDirectory("Userdata");
                if (!CreateStore().FileExists("Userdata\\data.txt"))
                {
                    CreateStore().CreateFile("Userdata\\data.txt");
                }
                IsolatedStorageFileStream stream = new IsolatedStorageFileStream("Userdata\\Userdata.txt", FileMode.Create, CreateStore());
                WriteToFile(CreateStore(), signin);

            }

            WebBrowserTask webBrowserTask = new WebBrowserTask();

            webBrowserTask.Uri = new Uri("http://www.smartsence.dk/winindexcheck.php?id=" + signintext.Text + igen + signintext.Text, UriKind.Absolute);

            webBrowserTask.Show();



        }
        private void minknap2_Click(object sender, RoutedEventArgs e)
        {
            NavigationService.Navigate(new Uri("/Info.xaml", UriKind.Relative));
        }

        private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
        {

        }

        private void info_Click(object sender, EventArgs e)
        {
            MessageBox.Show("SmartSence App 4.0 - Is free to use, it´s has never been easier to navigate around the web. Buy the app and get free VIP status forever - Please support us :) ");
        }
        private void VIP_Click(object sender, EventArgs e)
        {
            WebBrowserTask webBrowserTask = new WebBrowserTask();

            webBrowserTask.Uri = new Uri("http://www.smartsence.dk/winindexappvipcheck2.php", UriKind.Absolute);

            webBrowserTask.Show();
        }

        private void image1_ImageFailed(object sender, ExceptionRoutedEventArgs e)
        {

        }
        #region NewMethods
        private IsolatedStorageFile CreateStore()
        {
            IsolatedStorageFile lager = IsolatedStorageFile.GetUserStoreForApplication();
            return lager;
        }

        private void WriteToFile(IsolatedStorageFile storeFile, string content)
        {
            IsolatedStorageFileStream fileStream = storeFile.OpenFile("Userdata\\Userdata.txt", FileMode.Open, FileAccess.Write); // Exception: not allowed on IsolatedStorageFile
            using (StreamWriter writer = new StreamWriter(fileStream))
            {
                writer.WriteLine(content);
            }
        }

        private string ReadFile(IsolatedStorageFile storeFile)
        {
            IsolatedStorageFileStream fileStream = storeFile.OpenFile("Userdata\\Userdata.txt", FileMode.Open, FileAccess.Read);
            using (StreamReader reader = new StreamReader(fileStream))
            {
                return reader.ReadLine().Trim();
            }
        }
        private void mail_Tap(object sender, GestureEventArgs e)
        {
            mail.Text = string.Empty;
        }
        #endregion


    }
}

1 个答案:

答案 0 :(得分:0)

我认为问题在于您没有关闭IsolatedStorageFileStream,因此文件仍处于打开状态,因此无法写入,因此抛出此异常。你应该确保包装你的读物和写入使用,或自己调用Dispose

 public MainPage()
        {
            InitializeComponent();
            if (CreateStore().FileExists("Userdata\\Userdata.txt"))
            {
                mail.Text = ReadFile(CreateStore()); //opens file and never closes it.
            }
        }

要解决此问题,您应该使用using语句。

private void WriteToFile(IsolatedStorageFile storeFile, string content)
        {
            using (IsolatedStorageFileStream fileStream = storeFile.OpenFile("Userdata\\Userdata.txt", FileMode.Open, FileAccess.Write){ // Exception: not allowed on IsolatedStorageFile
            using (StreamWriter writer = new StreamWriter(fileStream))
            {
                writer.WriteLine(content);
            }
        }
}

        private string ReadFile(IsolatedStorageFile storeFile)
        {
            using(IsolatedStorageFileStream fileStream = storeFile.OpenFile("Userdata\\Userdata.txt", FileMode.Open, FileAccess.Read){
            using (StreamReader reader = new StreamReader(fileStream))
            {
                return reader.ReadLine().Trim();
            }
        }
}