Visual Studios 忽略文件

Posted

技术标签:

【中文标题】Visual Studios 忽略文件【英文标题】:Visual Studios Ignoring File 【发布时间】:2013-12-25 23:04:55 【问题描述】:

Visual Studios 忽略了我要播放的文件。使用此代码,它会返回 false,因为它不加载文件。

    result = LoadWaveFile("../Engine/data/sound01.wav", &m_secondaryBuffer1);
if (!result)

    return false;

【问题讨论】:

确保您尝试加载的文件的路径名确实相对于应用程序的当前工作目录。 使用相对路径并不是一个错误。使其成为绝对路径。 “当前工作目录”正在迅速成为除了琐碎的控制台应用程序之外的任何东西。 @IInspectable:什么?如果我正确地解码了你的双重否定,你建议应用程序应该总是烘焙硬路径。这通常是一个非常非常糟糕的想法。如果有的话,您需要一个相对于可执行文件位置的相对路径。 @IInspectable :好的。当我阅读“使其成为绝对路径”时,我在设想LoadWaveFile("C:\\Users\\Me\\My Projects\\This Project\\Engine\\Data\\sound01.wav", ...) 或类似的东西。你的意思是你需要构造一个绝对路径,但是这个绝对路径仍然是相对于在运行时确定的。 【参考方案1】:

不要在当前工作目录上使用相对路径。而是构建一个绝对路径,结合GetModuleFileName 和您的原始相对路径。当前工作目录不可靠,不应使用。

编辑:当前目录有什么问题?简而言之,它是易变的。首先,该过程可能不会在预期的目录中启动(就像您的情况一样)。用户可以创建应用程序的快捷方式并在那里指定任何起始目录。其次,Windows API(特别是GetOpenFileName)中有一些函数可以改变当前目录作为副作用。第三,应用程序使用的一些第三方库可以更改当前目录。第四,当前目录在进程中是唯一的,线程间共享,所以即使你在依赖它之前调用SetCurrentDirectory,其他线程也可以同时改变它。

在小型演示应用程序案例中,所有这些原因几乎不存在,如果您打算的话,您甚至可以通过将项目 > 属性 > 配置属性 > 调试 > 工作目录设置为 $(OutDir) 来防止第一个原因从调试器启动应用程序。不过,这是一个非常具体的用例,所以我会选择更强大的解决方案,它不依赖于当前目录的易失性。

【讨论】:

以上是关于Visual Studios 忽略文件的主要内容,如果未能解决你的问题,请参考以下文章

在 Visual Studio 2015(Web 项目)中排除/忽略文件夹

资源 (.rc) 文件包含标头忽略 Visual Studio 项目包含路径

Visual Studios - 在不同项目之间共享文件夹

由于找不到文件错误,无法在 Visual Studios 中运行 C++ 代码 [重复]

忽略Visual Studio中错误列表中特定文件的错误

在 Visual Studios 中创建 sqlite3.lib 文件/使用 sqlite3 [关闭]