【发布时间】:2018-02-12 09:54:51
【问题描述】:
我正在尝试使用 system() 命令获取 Windows PC 的 HDD 串行密钥,并将该数字保存在文本 (.txt) 文件中,文件名由用户选择。 system() 命令之前一切正常,但是 system() 命令没有更改文件名,也就是说,不是在用户选择之后命名文件,它只是在“contract_file_name”之后命名,没有扩展名。例如:如果我给出文件名: blahblah ,它应该创建一个名为“blahblah.txt”的文本文件(包含硬盘序列号),但它创建的是一个名为“contract_file_name”的文件。
代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char contract_file_name[100];
FILE *fp1 ;
filename:
printf("Please Give an APPROPRIATE name for SENDER-RECEIVER CONTRACT file. Please Don't use any .txt extension\nFILE NAME: ");
gets(contract_file_name);
strcat(contract_file_name,".txt");
if((fp1=fopen(contract_file_name,"r")))
{
printf("A Contract File with %s already EXITS.Please Choose another name\n".contract_file_name);
goto filename;
}
else
{
fp1= fopen(contract_file_name,"w");
fprintf(fp1,"$Sender: %s\n",getenv("USERNAME"));
fclose(fp1);
system("wmic path win32_physicalmedia get SerialNumber >> contract_file_name"); //Having problem in this line,I think.
fp1 = fopen("contract_file_name","a");
fprintf(fp1,"\n");
fclose(fp1);
}
return 0;
}
我能感觉到问题出在我的方法 system() 命令上,但是找不到任何解决方案。谁能建议我如何解决这个问题?
提前致谢。
【问题讨论】:
-
system()函数不是命令提示符。它只运行程序,但不进行字符串替换和 I/O 重定向。 -
@iBug 谢谢,不知道,有什么替代建议吗?
-
@iBug 谁说它不做重定向?!它正在为 OP 重定向
-
@iBug:
system启动一个命令解释器,它实际上进行变量扩展和重定向。从技术上讲,OP 可以使用putenv并进行变量扩展。但是我强烈反对这样做。 -
@iBug,
system执行%ComSpec% /c [command line],这当然允许环境变量扩展和标准 I/O 重定向。我不知道你测试了什么导致你得出不同的结论。