0

我在 WinUI3 项目中使用 c++/winrt,我试图让应用程序拉出一个文本文件,用户可以从中选择一个选项。我试图访问的文件位于项目文件夹中并包含在项目中。目前,我已将文件路径设置为我的设备,因此它会从我的目录中提取文本文件。我希望应用程序能够从程序文件中读取,而不是从当前编码的长文件路径中读取。我尝试更改文件的相对路径并使用 fstream 函数读取文件。我也尝试使用“Aircrafts/Aircrafts.txt”,但这也不起作用。

这是代码片段。

fstream aircraftFile;
string info;

void MainWindow::loadPlatformData()
ifstream aircraftFile; //File Object for list
aircraftFile.open("C:\\Users\\TimmyK\\Documents\\GitHub\\sentinel3\\Sentinel3\\Aircrafts\\Aircrafts.txt", ios::in);
4

1 回答 1

0

我的猜测是您正在编写一个 UWP 项目,这就是对文件的全路径访问失败的原因。根据Microsoft Docs,UWP 对文件系统的访问受到限制。

对于 UWP 项目,在文件属性中将文件标记为Content Yes,以便将其放入应用程序的布局包中。通常,“当前工作目录”指向您打包程序的安装位置。您可以使用以下命令获取此目录的完整路径:

auto installdir = Windows.ApplicationModel::Current().InstalledLocation();
std::wstring str = installdir.Path().c_str();

对于 Win32“经典”桌面应用程序,没有特定的打包或安装解决方案,因此有很多不同的方法可以做到这一点。在 Visual Studio 中,当您启动调试器或运行程序时,“当前工作目录”将是项目目录,但如果您从命令行运行 EXE,它将位于不同的目录中。

要根据 IInspectable 查找正在运行的 EXE 目录,请使用GetModuleFileName

wchar_t exePath[MAX_PATH] = {};
DWORD nc = GetModuleFileNameW(nullptr, exePath, MAX_PATH);
if (nc > MAX_PATH || nc == 0)
{
    // Error condition
}

一个典型的模式是查看 EXE 文件夹,然后“向上走”该目录以查找资产文件。这是我们在 Win32 的 DirectX 示例中经常做的事情。请参阅查找媒体

于 2022-03-03T04:34:44.173 回答