操作系统错误:没有这样的文件或目录,errno = 2

Posted

技术标签:

【中文标题】操作系统错误:没有这样的文件或目录,errno = 2【英文标题】:OS Error: No such file or directory, errno = 2 【发布时间】:2020-01-13 00:11:06 【问题描述】:

我无法加载存储在我的资产文件夹中的 html 文件。我已经搜索了 2 天,但我似乎无法找出原因。

我已确保将它也包含在 pubspec.yaml 中,并带有适当的缩进和所有 - 构建良好。我在 pubspec.yaml 中加载的图像资产加载没有问题,所以我知道这部分应该没问题。

我还尝试使用 .txt 文件按照此处的确切示例代码对其进行测试:https://api.flutter.dev/flutter/dart-io/File-class.html - 来自“从文件中读取”作为流部分。它给出了同样的错误。

这就是我想要做的:

// Tried this with a test .txt file too ('assets/html/test.txt')
File file = new File('assets/html/emaiL_bank.html');

Stream<List<int>> inputStream = file.openRead();
inputStream
    .transform(utf8.decoder)
    .transform(new LineSplitter())
    .forEach((l) => print('testing Print: $l'));

这是我的 pubspec.yaml 的一部分:

flutter:
  assets:
    - assets/images/ic_splashscreen.jpg
    - assets/images/at.png
    - assets/images/lock.png
    - assets/html/emaiL.html
    - assets/html/emaiL_bank.html
    - assets/html/test.txt

..我得到 当它试图做 file.openRead()

试过flutter clean、重启IDE、重建——似乎没有任何效果。

任何帮助/线索将不胜感激。

【问题讨论】:

看看这个问题***.com/q/50903106/8745788对你有没有帮助 不幸的是没有帮助:( 【参考方案1】:

请使用 rootBundle 加载资源 https://flutter.dev/docs/development/ui/assets-and-images

import 'dart:async' show Future;
import 'package:flutter/services.dart' show rootBundle;

Future<String> loadAsset() async 
  return await rootBundle.loadString('assets/config.json');

如果您正在尝试为 webview 加载 html 文件,请参考此https://inducesmile.com/google-flutter/how-load-a-local-html-file-in-flutter-webview/

Future<String> _loadLocalHTML() async 
  return await rootBundle.loadString('assets/html_code.html');

参考文档中的代码

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_webview_plugin/flutter_webview_plugin.dart';
import 'dart:async';

class LoadHTMLFileToWEbView extends StatefulWidget 
  @override
  _LoadHTMLFileToWEbViewState createState() => _LoadHTMLFileToWEbViewState();


class _LoadHTMLFileToWEbViewState extends State<LoadHTMLFileToWEbView> 
  @override
  Widget build(BuildContext context) 
    return FutureBuilder<String>(
      future: _loadLocalHTML(),
      builder: (context, snapshot) 
        if (snapshot.hasData) 
          return WebviewScaffold(
            appBar: AppBar(title: Text("Load HTM file in WebView")),
            withjavascript: true,
            appCacheEnabled: true,
            url: new Uri.dataFromString(snapshot.data, mimeType: 'text/html')
                .toString(),
          );
         else if (snapshot.hasError) 
          return Scaffold(
            body: Center(
              child: Text("$snapshot.error"),
            ),
          );
        
        return Scaffold(
          body: Center(child: CircularProgressIndicator()),
        );
      ,
    );
  


Future<String> _loadLocalHTML() async 
  return await rootBundle.loadString('assets/html_code.html');

【讨论】:

谢谢。这似乎有效。顺便说一句,我不想​​将它加载到 webview 中。我正在尝试将其作为字符串读取,然后需要对其进行处理并发送到 API。另外,出于好奇。为什么必须使用 rootBundle 从资产加载?通过 File 类可以加载什么样的路径? 完整路径类似于 /scard/0/your_andorid_dir/your_asset_file。不可能知道每种 android 类型的正确完整路径。 我明白了。谢谢你的帮助,好心的先生。

以上是关于操作系统错误:没有这样的文件或目录,errno = 2的主要内容,如果未能解决你的问题,请参考以下文章

气流 SSH 操作错误:[Errno 2] 没有这样的文件或目录:

Popen 错误:[Errno 2] 没有这样的文件或目录

FileSystemException:无法打开文件,路径 = '/storage/0/emulated/myfolder/myfile.txt'(操作系统错误:没有这样的文件或目录,errno =

Python IOError 中的错误:[Errno 2] 没有这样的文件或目录:'data.csv' [重复]

docker-compose 错误:FileNotFoundError:[Errno 2] 没有这样的文件或目录

pip install dryscrape 失败并显示“错误:[Errno 2] 没有这样的文件或目录:'src/webkit_server'”?