2013-07-20 2 views
0

IsolatedStorageFile.FileExists(string path) работает, но StreamReader(string samePath) нет? Я проверял оба пути равными. Я понятия не имею, почему StreamReader взрываетIsolatedStorageFile.FileExists (строковый путь) работает, но StreamReader (string samePath) нет?

 List<ProjectObj> ret = new List<ProjectObj>(); 
    IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication(); 

    if (!file.DirectoryExists("/projects/")) //trying to validate the dir exists 
     return ret; 

    string[] fileNames = file.GetFileNames("/projects/"); 

    foreach (string filename in fileNames) 
    { 
     if (!file.FileExists("/projects/" + filename)) //validate just one more time.. 
      continue; 

     ProjectObj tempProj = new ProjectObj(); 

     //Even with the validation it still breaks right here with the bellow error 
     StreamReader reader = new StreamReader("/projects/"+filename); 

Исключение типа «System.IO.DirectoryNotFoundException» произошло в mscorlib.ni.dll , но не был обработан в пользовательском коде

Сообщение: Могли не найти часть пути 'C: \ projects \ Title_939931883.txt'.

ответ

1

Дайте это попробовать. Чтение и запись файлов в IsolStorage имеет другой путь и его следует использовать таким образом. Вы должны рассмотреть возможность чтения How to: Read and Write to Files in Isolated Storage.

 public static List<ProjectObj> getProjectsList() 
     { 
      List<ProjectObj> ret = new List<ProjectObj>(); 
      IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication(); 

      if (!file.DirectoryExists("/projects/")) //trying to validate the dir exists 
       return ret; 

      string[] fileNames = file.GetFileNames("/projects/"); 

      foreach (string filename in fileNames) 
      { 
       if (!file.FileExists("/projects/" + filename)) //validate just one more time... 
        continue; 

       ProjectObj tempProj = new ProjectObj(); 

       using (var isoStream = new IsolatedStorageFileStream("/projects/" + filename, FileMode.Open, FileAccess.Read, FileShare.Read, file)) 
       { 
        using (StreamReader reader = new StreamReader(isoStream)) 
        { 
        } 
       } 
+0

Операция не разрешена на IsolStorageFileStream. –

+0

Я обновил ответ и исправил код, используя http://stackoverflow.com/questions/8415979/operation-not-permitted-on-isolatedstoragefilestream-error –

+0

По-прежнему та же ошибка при первой строке использования –

1

Путь не является одинаковым в обоих случаях. В first case вы получаете User store for application, а затем ищите файл в нем. Но в later case вы просто ищете в base directory.

StreamReader строитель ожидает absolute path файла.

Вам нужно создать IsolatedStorageFileStream и передать его на StreamReader -

using (IsolatedStorageFileStream fileStream = new IsolatedStorageFileStream 
           ("/projects/" + filename, FileMode.Open, file)) 
{ 
    using (StreamReader reader = new StreamReader(fileStream)) 
    { 
    } 
} 
+0

Операция не разрешена на IsolatedStorageFileStream. –

+0

Вы можете выполнить операцию над IsolatedStorageFileStream. См. Эту ссылку из MSDN - http://msdn.microsoft.com/en-us/library/xf96a1wz.aspx –

0

Это было решение, которое я придумал

 List<ProjectObj> ret = new List<ProjectObj>(); 
     IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication(); 

     if (!file.DirectoryExists("/projects/")) 
      return ret; 
     foreach (String filename in file.GetFileNames("/projects/")) 
     { 
      IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication(); 
      IsolatedStorageFileStream fileStream = myIsolatedStorage.OpenFile("/projects/"+filename, FileMode.Open, FileAccess.Read); 
      using (StreamReader reader = new StreamReader(fileStream)) 
      { 
       String fileInfo = reader.ReadToEnd(); 
      } 
     } 

Я не знаю, почему я получал недопустимую операцию при загрузке приложения, но я знаю, почему это произошло позже. Я думаю, когда вы пытаетесь получить доступ к одному файлу, чтобы быстро вызвать ошибки. Таким образом, я добавил в файл-файл, а также я должен был избавиться от других доступов до этого.