Ошибка «Операция не разрешена для IsolatedStorageFileStream.»WP7 - PullRequest
3 голосов
/ 03 марта 2012

Я пытаюсь прочитать текстовый файл из IsolatedStorage и проверить, что он содержит строку. Если нет, строка добавляется в конец файла. Но когда я пытаюсь записать строку в файл, я получаю сообщение об ошибке: "Operation not permitted on IsolatedStorageFileStream.". Мой код показан ниже. Как я могу преодолеть эту проблему?

public void AddToDownloadList()
{
    IsolatedStorageFile downloadFile=IsolatedStorageFile.GetUserStoreForApplication();

    try
    {
        string downloads = string.Empty;

        if (!downloadFile.DirectoryExists("DownloadedFiles"))
            downloadFile.CreateDirectory( "DownloadedFiles" );

        if(downloadFile.FileExists("DownloadedFiles\\DownloadList.txt"))
        {
            IsolatedStorageFileStream downloadStream = downloadFile.OpenFile("DownloadedFiles\\DownloadList.txt",FileMode.Open, FileAccess.Read );

            using ( StreamReader reader = new StreamReader( downloadStream ) )
            {
                downloads = reader.ReadToEnd();
                reader.Close();
            }
            downloadFile.DeleteFile( "DownloadedFiles\\DownloadList.txt" );
        }

        downloadFile.CreateFile( "DownloadedFiles\\DownloadList.txt" );

        string currentFile = FileName;

        if ( !downloads.Contains( currentFile ) )
        {
            downloads += currentFile;

            using ( StreamWriter writeFile = new StreamWriter( new IsolatedStorageFileStream( "DownloadedFiles\\DownloadList.txt", FileMode.Create, FileAccess.Write, downloadFile ) ) )
            {
                writeFile.Write( currentFile + "," );
                writeFile.Close();
            }
        }
   }

   catch ( Exception ex )
   {
       string message = ex.Message;
   }
}

1 Ответ

5 голосов
/ 03 марта 2012

Я думаю, что проблема, с которой вы столкнулись, связана со строкой, в которой вы создаете StreamWriter, обновляя IsolatedStorageFileStream - когда у вас уже должен быть правильный ответ из вызова downloadFile.CreateFile ().

Попробуйте этот код, я думаю, что он делает то, что вы хотите сделать:

public static void AddToDownloadList()
{
    try
    {
        AddToDownloadList("DownloadedFiles", "this file name", "DownloadedFiles\\DownloadList.txt");
    }
    catch (Exception ex)
    {
        System.Diagnostics.Debug.WriteLine("Exception: " + ex.Message);
    }
}

public static void AddToDownloadList(string directory, string fileName, string filePath)
{
    string downloads = string.Empty;
    using (IsolatedStorageFile downloadFile = IsolatedStorageFile.GetUserStoreForApplication())
    {
        if (!downloadFile.DirectoryExists(directory))
            downloadFile.CreateDirectory(directory);


    if (downloadFile.FileExists(filePath))
        {
            IsolatedStorageFileStream downloadStream = downloadFile.OpenFile(filePath, FileMode.Open, FileAccess.Read);
            using (StreamReader reader = new StreamReader(downloadStream))
            {
                downloads = reader.ReadToEnd();
                reader.Close();
            }
        }

        string currentFile = fileName;
        if (!downloads.Contains(currentFile))
        {
            downloadFile.DeleteFile(filePath);
            using (IsolatedStorageFileStream stream = downloadFile.CreateFile(filePath))
            {

                downloads += currentFile;
                using (StreamWriter writeFile = new StreamWriter(stream))
                {
                    writeFile.Write(currentFile + ",");
                    writeFile.Close();
                }

            }
        }
    }
} 
...