2017-05-03 7 views
0

私はサーバからダウンロードして保存したpdfを持っています。次に、UIWebView内のファイルパスからファイルを開きます。これは初めてアプリを起動するときに機能します。アプリケーションを再起動すると、ファイルのパスが同じであっても、ドキュメントは開かれません。また、ドキュメントは、アプリケーションのドキュメントフォルダに存在します。App relaunch iOSのドキュメントフォルダからPDFが読み込まれない

var filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), fileName); 

using (FileStream destinationStream = File.Create(filePath)) 
{ 
    await documentStream.CopyToAsync(destinationStream); 
} 

ファイルパス文書を初めて保存した後

SaveToFolder.cs: - - :

私のような何かをやっているアプリのリニューアルに

/var/mobile/Containers/Data/Application/C3EA2325-81CA-4EC9-8C03-479ACF7EE330/Documents/Insufficiency.pdf 

ファイルパスを

/var/mobile/Containers/Data/Application/C3EA2325-81CA-4EC9-8C03-479ACF7EE330/Documents/Insufficiency.pdf 

何か間違っていることがありますか?

+0

ドキュメントディレクトリからファイルをロードするコードはどこですか?もう1つ重要なポイントファイルロードはASYNCメソッドの下にある必要があります。ファイルを読み込んでいるときには 'await'となります。時間がかかる場合があります。 –

+0

こんにちは@Gagan_iOS、返信いただきありがとうございます。私の問題は、最初の起動時に、ファイルがダウンロードされてファイルパスに保存され、保存されたファイルがファイルパスから正常に開かれたことです。しかし、アプリケーションの2回目の起動または終了時にしばらくしてから起動すると、同じパスにファイルが存在しないと表示されます。どこにファイルがドキュメントディレクトリにありますか – user3034944

答えて

1

少し前に同じ問題が発生しました。あなたはおそらく、あなたのルートが同様に変化している答え

You shouldn't store raw file paths for persistence (or if you do, know that the root can move on you). A better practice would be to only store the relative part of the path and always attach it to the current "root" path in question (particularly if you might be sharing data across devices as with iCloud).

によるとCan't find saved file (in device) after restarting the app

を参照することができます。あなたはXamarinにそうようにフォルダあなたのアプローチを変更して、ドキュメントへのデフォルトのパスとファイル名を追加することができます -

var docsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); filePath = docsPath +"/" + "Insuffeciency.pdf";

また、ファイルを保存しながら、MyDocumentsフォルダにPersonalフォルダを変更することを検討してください。

1

私は、&の書き込みファイルのためにiOSでファイルを作成しました。 LoadAndSaveが

using System; 
using System.Threading.Tasks; 

namespace FileReader 
{ 
    public interface LoadAndSave 
    { 
     Task SaveTextAsync(string fileName, string text); 
     Task<string> LaodTextAsync(string fileName); 
     bool IsFileExits(string fileName); 
    } 
} 
以下のようにインターフェイスであるコード

var tempFileService = DependencyService.Get<LoadAndSave>(); 
var itemFile = await tempFileService.LaodTextAsync(tempFile.StoredFileName); 
var rootobject = JsonConvert.DeserializeObject<Rootobject>(itemFile); 

である以下、私の.CSクラス(ContentPageのサブクラス)から読み込みを行うためのiOS

using System; 
using Xamarin.Forms; 
using FileReader.iOS; 
using System.IO; 
using FileReader; 
using Foundation; 
using System.Linq; 
using System.Threading.Tasks; 

[assembly: Dependency(typeof(SaveAndLoadiOS))] 

namespace FileReader.iOS 
{ 
    public class SaveAndLoadiOS : LoadAndSave 
    { 
     public static string DocumentPath 
     { 
      get 
      { 
       var documentURL = NSFileManager.DefaultManager.GetUrls(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomain.User).Last(); 
       return documentURL.Path; 
      } 
     } 

     public string CreatePath(string fileName) 
     { 
      return Path.Combine(DocumentPath, fileName); 
     } 

     public async Task SaveTextAsync(string fileName, string text) 
     { 
      string path = CreatePath(fileName); 
      if (IsFileExits(fileName)) 
      { 
       File.Delete(path); 
      } 
      using (StreamWriter sw = File.CreateText(path)) 
       await sw.WriteAsync(text); 
     } 

     public async Task<string> LaodTextAsync(string fileName) 
     { 
      string path = CreatePath(fileName); 
      using (StreamReader sr = File.OpenText(path)) 
       return await sr.ReadToEndAsync(); 
     } 

     public bool IsFileExits(string fileName) 
     { 
      return File.Exists (CreatePath(fileName)); 
     } 
    } 
} 

で見てください。

希望します。

+0

ありがとうございます。 SaveTextAsync()にテキストを保存していますが、SaveFile()のようにストリームを保存するには – user3034944

+0

また、 'tempFileService'と' tempFile.StoredFileName'とは何ですか?私はXamarin.Formsを使用していません。ちょうどXAmarin.iOS – user3034944

+0

私はあなたに同じ問題を依然としてあなたの方法を試みました。私の問題は、ファイルの保存や読み込みではありません。ファイルが存在するかどうかをチェックする同じコードで初めて完全に動作します。ファイルが存在するかどうかを確認しても、アプリでのみ再起動しますが、開いていません。 – user3034944

関連する問題