我有一个批处理文件,它改变了方向到一个特定的工具链,并执行一个命令是这样的:执行Windows命令用C
cd C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin
avr-objcopy -O binary C:\Users\cinar\Desktop\hextobin\GccApplication.elf C:\Users\cinar\Desktop\hextobin\GccApplication.bin
我想用我的C语言应用程序做到这一点。我发现this topic,尝试了system();
命令并且它部分工作。我可以这样称呼:
system("cd");
并取回方向。但我不能用这个命令更改:
system("cd C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin");
这引起了编译警告有关未知逃逸,所以我说\
以逃脱,并试图此:
system("cd C:\\Program Files (x86)\\Atmel\\Studio\\7.0\\toolchain\\avr8\\avr8-gnu-toolchain\\bin");
我能够编译和运行但这并没有改变方向。
有没有可能通过system()
执行我的命令?因为我只想改变方向并执行一个命令,所以我想保持简单。
更新:我后来发现了这个话题: system("cd <path>") in a C program
然后解决了我的查询与此:
chdir("C:\\Program Files (x86)\\Atmel\\Studio\\7.0\\toolchain\\avr8\\avr8-gnu-toolchain\\bin");
system("avr-objcopy -O binary C:\\Users\\cinar\\Desktop\\ff.elf C:\\Users\\cinar\\Desktop\\ff.bin");
顺便说一句,你的'系统( “CD的东西”);'*没有*改变当前目录,但只通过'system'催生子shell当前目录。它的工作方式如下:你的程序产生了一个子shell,并在子shell中执行命令cd something。子外壳的当前目录已更改。然后退出子shell并且程序继续运行。但改变subshell的当前目录是无用的,因为它刚刚退出!你的程序当前目录没有改变。使用'chdir',你改变你的程序的当前目录。 (但是,是的,CreateProcess是你所需要的) – CherryDT
我用'chdir'实现了我的目的,它看起来很好。我将我的可执行文件移动到另一个目录,以查明它是否失败,但运行良好。你认为在某些情况下'chdir'会导致失败吗?我目前不使用'CreateProcess'。 –
如果你使用'chdir',你至少应该在生成子进程后改回工作目录。事情是,'CreateProcess'方法用一个你传递给'CreateProcess'函数的特定工作目录来启动子进程。 'chdir'函数改变你自己程序的工作目录,然后产生子进程(继承你的程序的当前工作目录)。然而,你现在改变了你自己程序的当前目录,所以下次你用相对路径做任何事情时(例如'open('myfile。txt')')它可能会失败,所以你应该保存旧的目录并将它改回 – CherryDT