我在c
写了一个时间表程序#include<stdio.h>
#include<conio.h>
void main()
{
int i=0;
int selection;
char day[20];
char sub1[20];
char sub2[20];
char sub3[20];
FILE *fp;
fp=fopen("aa.txt","w");
textcolor(5);
textbackground(3);
clrscr();
while(i<3)
{
printf("Enter the day ");
scanf("%s",day);
printf("Enter the period 12.30-1:30 ");
scanf("%s",sub1);
printf("Enter the period 1.35-2.40 ");
scanf("%s",sub2);
printf("Enter the period 2.45-3.50 ");
scanf("%s",sub3);
fprintf(fp,"\n %s TIMETABLE IS AS FOLLOWS\n",day);
fprintf(fp,"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
fprintf(fp,"|~~~~~~~~~|~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~|~~~~~~~~~~|\n");
fprintf(fp,"| TIME | 12.30-1.30 | 1.35-2.40 |2.45-3.50 |\n");
fprintf(fp,"|~~~~~~~~~|~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~|~~~~~~~~~~|\n");
fprintf(fp,"| SUBJECT * %s * %s * %s|\n",sub1,sub2,sub3);
fprintf(fp,"|~~~~~~~~~|~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~|~~~~~~~~~~|\n");
i++;
}
printf(" Time table has been Created in the File aa.txt successfully");
getch();
}
当我完成时间表时。时间表在a.txt文件中创建。我希望打开该文件并在记事本中自动显示。如何在c中编程?
答案 0 :(得分:7)
使用
system("notepad.exe aa.txt");
答案 1 :(得分:7)
Dani已经描述了更简单的方法(使用system
),因此我将使用Windows API描述另一种(更复杂但也更灵活)的方法。浏览API(概述 - &gt;系统服务 - &gt;进程和线程),有一个关于如何create a process使用CreateProcess()函数的小例子。在你的情况下:
CreateProcess("notepad.exe", // Name of program to execute
"aa.txt", // Command line
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
FALSE, // Set handle inheritance to FALSE
0, // No creation flags
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&si, // Pointer to STARTUPINFO structure
&pi); // Pointer to PROCESS_INFORMATION structure
然后等待Notepad进程退出,如示例中所述。
答案 2 :(得分:5)
第三种方式:使用ShellExecute
shell函数告诉shell使用默认编辑器“只打开文件”:
#include <windows.h>
#include <Shellapi.h>
// ...
if(ShellExecute(
NULL, // No parent window for error message boxes/...
"open", // Shell action ("verb") to be performed on the file (as opposed to "print", "explore", ...)
"aa.txt", // File to be opened
NULL, // Command-line parameters - not used when opening documents
NULL, // Working directory - the current one is used by default
SW_SHOW // State of the window of the application being launched - SW_SHOW is the default
)<=(HINSTANCE)32 // If ShellExecute returns a value <=32 it means that an error has occurred
)
{
puts("Cannot open aa.txt with the default editor - ShellExecute failed.");
}
这将使用aa.txt
文件的默认编辑器打开txt
。
在我看来,这是最好的解决方案:
它尊重用户对编辑器的选择(与CreateProcess
不同,后者只是打开notepad.exe
);如果我将PSPad设置为txt文件的默认编辑器,它将弹出PSPad而不是记事本。
编辑器的搜索路径没有问题(notepad.exe
在哪里?)
其行为已完全定义,与system
函数不同,command.com
函数依赖于cmd.exe
/ system
,它们在Windows版本之间存在细微差别,并且不会向您提供任何内容记录/简单的方法来检查操作是否成功;
它没有像{{1}}那样给你任何“可移植性的错误感觉”,它会在Linux机器上愉快地编译,但在运行时根本不能工作。