2013-09-02 2 views
0

Я пытаюсь прочитать файл, не созданный в приложении.IsolatedStorageException в телефоне Windows 7 приложение

Вот пример я пробовал:

string FileName = "stops.txt"; 
string FolderName = "data"; 
string FilePath = System.IO.Path.Combine(FolderName, FileName); 

IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication(); 
IsolatedStorageFileStream fileStream = myIsolatedStorage.OpenFile(FilePath, FileMode.Open, FileAccess.Read); 
using (StreamReader reader = new StreamReader(fileStream)) 
{ 
    MessageBox.Show(reader.ReadLine()); 
} 

Я бросаю "isolatedstorageexception": link to exception

System.IO.IsolatedStorage.IsolatedStorageException: [IsolatedStorage_Operation_ISFS] 
Arguments: 
Debugging resource strings are unavailable. Often the key and arguments provide sufficient information to diagnose the problem. See http://go.microsoft.com/fwlink/?linkid=106663&Version=4.0.50829.0&File=mscorlib.dll&Key=IsolatedStorage_Operation_ISFS 
    at System.IO.IsolatedStorage.IsolatedStorageFileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, IsolatedStorageFile isf) 
    at System.IO.IsolatedStorage.IsolatedStorageFile.OpenFile(String path, FileMode mode, FileAccess access) 
    at HorairesCTS.MainPage.test() 
    at HorairesCTS.MainPage..ctor() 

Может кто-то помочь мне прочитать этот файл?

Спасибо!

+0

Когда вы говорите «не создано в приложении» - что * * * создал файл? Если он не создан вашим приложением, почему вы ожидаете, что он будет в хранилище пользователей для приложения? –

+0

Его файл, который был скопирован/вложен в проект, не создан с изолированными функциями хранения –

+0

Я подозреваю, что он не находится в изолированном хранилище, а затем - по крайней мере, не в пользовательской части изолированного хранилища. Если это в проекте, вы можете получить к нему доступ в качестве URL-адреса ресурса или просто вставить его в сборку. –

ответ

1

Если вы пытаетесь прочитать файл, который входит в ваш проект, он не будет в IsolatedStorage. Вы должны получить к нему доступ через Application.GetResourceStream.

Вот пример код для чтения локального текстового файла:

private string ReadTextFile(string filePath) 
{ 
    var resourceStream = Application.GetResourceStream(new Uri(filePath, UriKind.Relative)); 
    Stream myFileStream = resourceStream.Stream; 
    StreamReader myStreamReader = new StreamReader(myFileStream); 
    return myStreamReader.ReadToEnd(); 
} 

Не забудьте установить Build action в Content о свойствах файла в Visual Studio.

ReadTextFile("data/stops.txt") 
+0

она прекрасно работает. Я не понимаю, почему это не удалось с этой ссылкой: http://www.geekchamp.com/tips/all-about-wp7-isolated-storage-read-and-save-text-files Но Thx для образца! –

+0

Это потому, что ваш файл не находится в изолированном хранилище, он находится в папке приложения, когда вы вставляете его в свое приложение. Изолированная хранилище хранит файлы, созданные во время выполнения (по умолчанию он пуст). –

0

Если вы хотите сохранить список объектов. Вы можете сделать это:

IsolatedStorageFileStream outStream = new IsolatedStorageFileStream("MyData.bin", FileMode.Create, myStore); 
     DataContractSerializer ser = new DataContractSerializer(typeof(List<ClsUser>)); 

     ser.WriteObject(outStream, valutaTyperListe); 
     outStream.Close(); 

Получить данные:

IsolatedStorageFile myStore = IsolatedStorageFile.GetUserStoreForApplication(); 
if (myStore.FileExists("MyData.bin")) 
      { 

       IsolatedStorageFileStream inStream = new IsolatedStorageFileStream("MyData.bin", FileMode.Open, myStore); 

       DataContractSerializer Serializ = new DataContractSerializer(typeof(List<ClsUser>)); 
       myUserList = Serializ.ReadObject(inStream) as List<ClsUser>; 
       inStream.Close(); 
      } 

и класс выглядеть так, не забудьте добавить "с помощью System.Runtime.Serialization;":

[DataContract] 
public class ClsUser 
{ 
    string name; 
    string lastname; 

    public ClsUser(string name, string lastname) 
    { 
     this.name = name; 
     this.lastname = lastname; 
    } 

    [DataMember] 
    public string Name 
    { 
     get { return name; } 
     set { name = value; } 
    } 

    [DataMember] 
    public string Lastname 
    { 
     get { return lastname; } 
     set { lastname = value; } 
    } 
} 
Смежные вопросы