返回介绍

9.1.4 文件流的重定向

发布于 2025-04-11 22:33:05 字数 1439 浏览 0 评论 0 收藏 0

在 C 语言中,还可以使用文件流重定向的方式来改变文件流所关联的文件。这就需要使用 freopen 函数,该函数原型如下:

FILE *freopen( const char *fname, const char *mode, FILE *stream );

freopen 函数的前两个参数和 fopen 函数的参数意义相同,第三个参数 stream,即是需要重定向的文件流。freopen 函数的返回值为重定向之后的新的文件流,如果重定向失败则为空指针。freopen 函数的功能就是将文件流 stream 关联到以 mode 模式打开的 fname 文件上。

可以将标准输出流重定向,让其关联到 D 盘的 test.txt 文件上。这样再使用 printf、putchar、puts 等函数进行打印输出,就不会再显示到控制台窗口,而是写入到 D 盘的 test.txt 文件中。例如:

freopen("D:\\test.txt", "w", stdout);
printf("Hello");
putchar(' ');
puts("World");

在 freopen 语句中,第三个参数是 stdout,表示需要重定向的是标准输出流,而第一个参数字符串指定了所关联的文件,第二个参数字符串指定了所关联文件的打开模式,由于输出流是往文件中写入数据,所以,这里使用的是“w”模式。

编译运行程序,会发现在控制台窗口上无任何信息。打开 D 盘上的 test.txt 文件,可看到有如下内容:

Hello World

也可以将标准输入流重定向,让其关联到 D 盘的 test.txt 文件上。这样再使用 scanf、gettchar、gets 等函数获取数据的时候,就不会再到控制台窗口上去获取由键盘输入的数据,而是到了 D 盘的 test.txt 文件中去获取数据。例如:

char ch1, ch2;
char str[100];
freopen("D:\\test.txt", "r", stdin);
scanf("%c", &ch1);
ch2 = getchar();
gets(str);
printf("ch1:%c\nch2:%c\nstr:%s\n", ch1, ch2, str);

在 freopen 语句中,第三个参数是 stdin,表示需要重定向的是标准输入流,由于需要读取数据,因此,模式字符串使用的是“r”。

编译运行程序,结果如下:

ch1:H
ch2:e
str:llo World

可见,通过对标准输入流的重定向之后,scanf、getchar 和 gets 函数都变为从 D 盘的 test.txt 文件获取数据。其中由 scanf 函数获取了第一个字符“H”保存到变量 ch1 中,由 getchar 函数获取了第 2 个字符“e”保存到变量 ch2 中,由 gets 函数获取剩余的字符,然后组成字符串“llo World”保存到字符数组 str 中。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。