【问题标题】:c# asp.net web api file existance not found using namespacec# asp.net web api文件存在使用命名空间找不到
【发布时间】:2018-02-08 11:48:44
【问题描述】:

我希望我做错了什么,因为此刻对我来说,我所做的似乎是正确的。首先,我想使用名称空间打开一个文件。 假设我有这个字符串:

string resource = "Middelware.DataResources.dba.Queries.getTest.sql"

然后我尝试使用以下方法打开它:

var stm = Assembly.GetExecutingAssembly().GetManifestResourceStream(resource)

但不幸的是它不起作用。所以我一直用这个作为测试用例:

if (File.Exists(@"C:\text.txt"))

但由于某种原因,它一直返回 false。我也喜欢使用:“C:\\text.txt”。但是什么也没发生。

我正在使用 Visual Studio 2017。发生这种情况的课程是静态的。

所以我的问题:

  1. 为什么 file.exist 似乎无法验证测试文件是否存在?

  2. 为什么是 var stm = Assembly.GetExecutingAssembly().GetManifestResourceStream(resource) 不起作用,因为命名空间应该是正确的?

希望有人能帮我解决这个愚蠢的问题。

亲切的问候

【问题讨论】:

  • 你在IDE里把sql脚本的类型改成'Embedded Resource'了吗?

标签: c# file asp.net-web-api stream namespaces


【解决方案1】:

你没有提供太多信息,所以我猜。

从文件中读取

来自File.Existsmethod reference,返回值可以是:

true 如果调用者具有所需的权限并且路径包含现有文件的名称;否则,false

如果 path 为 null、无效路径或零长度字符串,此方法也会返回 false

如果调用者没有足够的权限读取指定的文件,则不抛出异常,并且无论路径是否存在,该方法都返回false

您已经排除了一些情况,因此您应该检查应用程序是否对目标文件或其父目录具有适当的读取权限。

从程序集中读取

资源流问题通常与:

  1. 资源名称错误。可以是大写/小写,也可以是 Visual Studio 编译器作为前缀放置的附加字符串。
  2. 资源实际上并未在程序集中编译

您可以列出程序集中的所有可用资源:

Assembly.GetExecutingAssembly().GetManifestResourceNames()

【讨论】:

    【解决方案2】:

    回答问题 1:我有一个错字..

    问题 2 在 cmets 中给出。让我引用:

    您是否在 IDE 中将 sql 脚本的类型更改为“嵌入式资源”? – Matt 3 分钟前

    【讨论】:

    • 这里也有错字:Middelware.DataResources.dba.Queries.getTest.sql - 我猜应该是“中间件”吗?
    猜你喜欢
    • 2017-04-20
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    • 2019-06-02
    • 2016-06-03
    相关资源
    最近更新 更多