ios - PDF 未从 App 重新启动 iOS 上的文档文件夹加载

标签 ios pdf xamarin uiwebview nsdocumentdirectory

我有一个从服务器下载并保存的 pdf。接下来,我从 UIWebView 中的文件路径打开文件。这在我第一次启动该应用程序时有效。当我再次重新启动应用程序时,即使文件路径相同,文档也打不开。此外,该文档确实存在于应用程序的文档文件夹中。

我正在做类似的事情:-

保存到文件夹.cs

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

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

第一次保存文档后的文件路径:-

 /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  

我做错了什么吗?

最佳答案

我在 iOS 中创建了一个文件用于读写文件。请在 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));
        }
    }
}

为了从我的 .CS 类(ContentPage 的子类)读取,下面是代码

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

其中LoadAndSave是一个接口(interface)如下

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);
    }
}

希望对您有所帮助。

关于ios - PDF 未从 App 重新启动 iOS 上的文档文件夹加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43755138/

相关文章:

pdf - 使用 SharePoint 2010 Word Automation Services 转换 Excel 和 PowerPoint

android - Xamarin.Android 是否有热重载替代方案?

c# - 无法在 Xaml 的嵌套类上设置属性

android - 无法使用 Pcl 存储在 Xamarin 表单中读取文件

ios - 显示路线距离

node.js - 在nodejs中使用pdfkit创建pdf文件

python - 你如何在 Jupyter notebook 中换行?

ios - 从索引 3 开始从 NSMutableArray 中删除所有对象

iOSOpenDev命令行工具构建报错

ios - 无法从ios objective-c 中的UIDatePicker获取回历日期?