gpt4 book ai didi

c - 在 DJGPP C 中使用 system() 打开通用文件

转载 作者:太空宇宙 更新时间:2023-11-03 23:24:09 25 4
gpt4 key购买 nike

我在这里遗漏了一些明显的东西。我正在使用 DJGPP C 编译器。我可以成功打开可执行文件,但不能打开其默认程序中的文件。

#include <stdio.h>

int main(void) {
char sys_cmd[100] = "C:\\WINDOWS\\system32\\Calc.exe";
system(sys_cmd);

system("\"C:\\TextFile.txt\"");

system("\"www.bbc.co.uk\"");
getch();

return 0;
}

运行此代码会使计算器启动。关闭计算器后,它会报告:

Bad command of file name   
Bad command of file name

所以其他两个系统调用有问题。我尝试将“START”添加到系统调用中,但这并不能解决问题。刚刚搜索了我的 Windows 7 Pro 系统,它没有 START.EXE。添加“cmd.exe”只是启动 cmd,所以就好像没有发送任何参数一样。

我可以在 cmd 中正常输入“C:\TextFile.txt”,它会打开 notepad.exe,里面打开了 TextFile.txt。

无论如何,理想情况下我会使用比 system() 更安全的方法来执行此操作,但我还没有在 DJGPP 中看到任何 ShellExecute 示例。

最佳答案

您不会在 djgpp 中找到 ShellExecute,因为它只是 DOS,不会创建真正的 Windows 应用程序,因此无法访问 Windows Api 调用。

ShellExecute 将能够使用 Windows 注册表找出需要使用哪个应用程序来打开某个文件扩展名。

我不知道 exec() 是否能够做到这一点,但我有疑问。

对于非常旧的版本,存在一个交叉编译器,允许从 djgpp 编译的程序调用 windows api。但由于这是基于 2.9 版本的编译器:http://www.delorie.com/djgpp/v2faq/faq3_6.html这可以被认为是死胡同。

如以下评论中所述,您可以插入从 .txt 到记事本的静态映射。如果你必须支持很多扩展,你基本上有两个选择:

  • 将编译器换成支持windows api的编译器(还有visual studio)
  • 执行 ftype 和 assoc 找出哪个扩展映射到哪个程序并保留你的 dos 编译器

请注意,djgpp 已经过时并且不会收到 Gcc 收到的相同更新

“hack”是从您的 C 程序创建一个临时的 .cmd 或 .bat 并将您需要的文件的开始委托(delegate)给该批处理。

关于c - 在 DJGPP C 中使用 system() 打开通用文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31230386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com