为啥 React Native RNFS 的 copyFile() 无法访问 iOS 上的现有文件?

Posted

技术标签:

【中文标题】为啥 React Native RNFS 的 copyFile() 无法访问 iOS 上的现有文件?【英文标题】:Why React Native RNFS's copyFile() cannot access to existing file on iOS?为什么 React Native RNFS 的 copyFile() 无法访问 iOS 上的现有文件? 【发布时间】:2019-12-31 01:16:09 【问题描述】:

我正在尝试使用 RNFS 从“/Documents”文件夹(在 ios 模拟器上)访问和复制文件,但是虽然 .exists() 可以找到该文件,但 .copyFile() 将错误返回为“文件 'temp. jpg' 不存在”

为什么会发生这种情况?

这是我的源文件路径(我也可以使用图像组件访问它):

在路径中添加“file://”也不起作用。

/Users/myusername/Library/Developer/CoreSimulator/Devices/D305Z9A4-6C67-4DFE-A07D-1EF4D0302B87/data/Containers/Data/Application/B933EF45-391F-4882-986F​​-92B5430823D0/Documents/temp.jpg

这是我的代码 sn-p,newlyCroppedImagePath 是上面的路径。 exists() 返回正确的结果,但 .copyFile() 返回“不存在”

    RNFS.exists(newlyCroppedImagePath)
    .then((success) => 
        console.log('File Exists!'); // <--- here RNFS can read the file and returns this
    )
    .catch((err) => 
      console.log("Exists Error: " + err.message);
    );

    RNFS.copyFile(newlyCroppedImagePath, tmpFilePath)
    .then((success) => 
        console.log('file moved!');

    )
    .catch((err) => 
      console.log("Error: " + err.message); // <--- but copyFile returns "doesn't exists" error for temp.jpg
    );

【问题讨论】:

【参考方案1】:

真正做到

RNFS.exists(newlyCroppedImagePath).then((success) => 
    console.log('File Exists!'); // <--- here RNFS can read the file and returns this
)

不代表文件存在。

由于exists() 返回一个Promise,if 条件总是为真。

试试下面的

RNFS.exists(filePath).then((status)=>
if(status)
    console.log('Yay! File exists')
 else 
    console.log('File not exists')

)

另外,请使用 RNFS.readDir() 检查目录中的可用文件,以检查您的文件是否已呈现。

参考 https://github.com/itinance/react-native-fs#readdirdirpath-string-promisestring

【讨论】:

以上是关于为啥 React Native RNFS 的 copyFile() 无法访问 iOS 上的现有文件?的主要内容,如果未能解决你的问题,请参考以下文章

React Native saveToCameraRoll 在 Android 上因“权限被拒绝”错误而失败

为啥视图不显示在 react-native 中?

为啥 npm install react-native 不起作用?

为啥我们不在 react-native 中 gitignore ios/ 和 android/

为啥我的代码不能在 web 中的 react-native 代码中运行

为啥 shadowColor: '...' - 不适用于“react-native-drawer”组件的 Android 上的抽屉样式?