首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在DJGPP C中用system()打开通用文件

在DJGPP C中用system()打开通用文件
EN

Stack Overflow用户
提问于 2015-07-05 12:34:23
回答 1查看 123关注 0票数 2

我漏掉了一些显而易见的东西。我正在使用DJGPP C编译器。我可以成功地打开可执行文件,但不能打开默认程序中的文件。

代码语言:javascript
复制
#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;
}

运行此代码将导致计算器启动。关闭计算器后,它报告:

代码语言:javascript
复制
Bad command of file name   
Bad command of file name    

另外两个系统调用也有问题。我尝试过在系统调用中添加"START“,但这并不能解决这个问题。刚刚搜索了我的Windows7Pro系统,它没有一个START.EXE。添加"cmd.exe“只是启动cmd,所以好像没有发送任何参数。

我可以正常地在cmd中输入"C:\TextFile.txt“,它将打开notepad.exe,并在其中打开TextFile.txt。

理想情况下,我应该使用比system()更安全的方法来完成这个任务,但是我还没有在DJGPP中看到任何ShellExecute的例子。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-05 13:04:49

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

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

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

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

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

  • 将编译器切换到支持windows的编译器(除了其他编译器外,还有visual studio )
  • 执行ftype和assoc以找出哪个扩展映射到哪个程序,并保留dos编译器。

请注意,djgpp已经相当过时,并且没有收到Gcc所做的相同的更新。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31230386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档