C语言 :文件操作4 文本文件的遍历和批量修改

一:dos dir 指令遍历文件目录,输出到文件

显示目录文件和子目录列表。如果在没有参数的情况下使用,则 dir 显示磁盘的卷标和序列号,后接磁盘上目录和文件的列表,包括它们的名称和最近修改的日期及时间。dir 可以显示文件的扩展名以及文件的字节大小。Dir 也显示列出的文件及目录的总数、累计大小和磁盘上保留的可用空间(以字节为单位)
命令语法:

dir [Drive:][Path][FileName] [...] [/p] [/q] [/w] [/d] [/a[[:]attributes]][/o[[:]SortOrder]] [/t[[:]TimeField]] [/s] [/b] [/l] [/n] [/x] [/c] [/4]

命令参数:
[Drive:][Dath]指定要查看列表的驱动器和目录。
[FileName]指定要查看列表的特定文件或一组文件。
/p 每次显示一个列表屏幕。要查看下一屏,请按键盘上的任意键。
/q 显示文件所有权信息。/w以宽格式显示列表,在每一行上最多显示 5 个文件名或目录名。
/d与 /w 相同,但是文件按列排序。

/a[[:]attributes]只显示那些指定属性的目录和文件名称。如果省略 /a,dir 将显示除隐藏文件和系统文件之外的所有文件名。如果在没有指定 attributes的值。冒号 ( :) 是可选的。使用这些值的组合,并且不得用空格分隔这些值。

说明
h隐藏文件
s系统文件
d目录
a准备好存档的文件
r只读文件
-h非隐藏的文件
-s系统文件以外的文件
/d只是文件(而非目录)
-a自上次备份后没有更改过的文件
-r非只读的文件

/o [[:]SortOrder] :
控制 dir 排序和显示目录名和文件名的顺序。如果省略 /o,dir 将按它们在目录中出现的顺序显示名称。如果在没有指定 SortOrder 的情况下使用 /o,dir 显示按字母顺序排列的目录名,然后显示按字母顺序排列的文件名。冒号 [ : ]是可选的。以下列表描述了每个可用于 SortOrder 的值。使用这些值的任意组合,并不要用空格分隔这些值。
n 按名称的字母顺序
e 按扩展名的字母顺序
d 按日期和时间,最早的优先。
s 按大小,最小的优先
g 在文件之前分组的目录
-n 按名称的逆序字母(从Z 到 A)排序
-e 按扩展名的逆序字母(从.ZZZ 到 .AAA)排序
/d 按日期和时间,最晚的优先
-s 按大小,最大的优先
-g 在文件之后分组的目录

/t [[:]TimeField]
指定显示或用于排序的时间字段。以下列表描述了每个可用于 TimeField 的值。

值 说明
c 创建
a 上次访问
w 上次写入
/s
列出指定目录及所有子目录中出现的每个指定的文件名。
/b
列出每个目录名或文件名,每行一个(包含文件扩展名)。/b 不显示标题信息或摘要。/b 替代 /w。
/l
按小写字母显示未排序的目录名和文件名。/l 不会将扩展字符转换为小写字符。
/n
显示长列表格式,文件名在屏幕最右边。
/x
显示 NTFS 和 FAT 卷上文件生成的短名称。显示与 /n 的显示相同,但是短名称显示在长名称之后。
/c
按文件大小显示多个分隔符。
/4
显示四位数字的年份格式。
/?
在命令提示符显示帮助。

DOS命令注释:
使用多个filenames
可以使用多个filenames。用空格、逗号或分号分开文件名。可以在 FileName中使用通配符(? 和 *)以显示一组文件。

使用通配符
可以使用通配符(? 和 *)显示文件和子目录的子集列表。

指定文件显示属性
如果使用 /a,并且 attributes中指定多个值,dir 只显示那些包含所有指定属性的文件的名称。例如,如果利用 /a:r-h 或 /ar-h 指定 /a ,并以值 r 和 -h 作为属性,则 dir 将只显示非隐藏的只读文件的名称。

指定文件名排序
如果指定了多个 SortOrder 值,dir 首先通过第一个标准对文件名进行排序,然后再通过第二个标准排序,等等。例如,如果使用 /o:e-s 或 /oe-s 指定了 /o 以及 SortOrder 的值 e 和 -s,则 dir 将根据扩展名对目录名和文件名从大到小进行排序,然后显示最终结果。扩展名按照字母排序使得没有扩展名的文件名最先显示,目录名次之,然后是具有扩展名的文件名。

使用重定向符号和管道
在使用重定向符号 (>) 将 dir 输出发送到文件,或者使用管道 (|) 将 dir 输出发送到其它命令时,请使用 /a:-d 和 /b 只列出文件名。可以使用 FileName 以及/b 和 /s 来指定 dir 在当前目录及其子目录中搜索所有匹配 FileName 的文件名。Dir 对查找的每个文件名只列出驱动器号、目录名、文件名和文件扩展名、每行一个路径。在使用管道重定向之前,应该在 Autoexec.nt 文件中设置 TEMP 环境变量。

预先设置 dir 参数
通过将 set 命令包含在 Autoexec.nt中的 DIRCMD 环境变量中,可以预置 dir 参数。可以使用 dir 参数和 set dircmd 的任意有效组合,其中包含文件的位置和名称。
例如,要使用 DIRCMD 环境变量将宽行显示格式 (/w) 设置为默认格式,必须在您的 Autoexec.nt 文件中键入以下命令:
set dircmd=/w
要单独使用 dir 命令,您可用 DIRCMD 环境变量替代参数。为此,请在 dir 命令提示符下键入要替代的参数(参数前面带上减号)。例如:
dir /-w
要更改 DIRCMD 默认设置,请键入:
set=NewParameter
新的默认设置对所有后接的 dir 命令有效,直到再次使用 set dircmd 或直到重新启动计算机。
要清除所有默认设置,请键入:
set dircmd=
要查看 DIRCMD 环境变量的当前设置,请键入:
set
Set 显示环境变量及其设置的列表。有关设置环境变量的详细信息,请参阅“相关主题”。
从“故障恢复控制台”可以使用包含各种参数的 dir 命令。

DOS命令范例:
要按字母顺序以宽格式一个接一个地显示所有目录,并在显示出每个屏幕后暂停一下,必须确保根目录是当前目录,然后键入:

dir /s/w/o/p

Dir 列出根目录的名称、根目录的子目录名称和根目录中文件的名称(包括扩展名)。然后 dir 在目录树中的每个子目录中列出子目录名和文件名。

要更改前面的范例以便 dir 显示文件名和扩展名但省略目录名,请键入:

dir /s/w/o/p/a:-d

要打印目录列表,请键入:

ir > prn

指定 prn 时,目录列表发送到连接 LPT1 端口的打印机。如果打印机被连接到不同的端口,则必须使用正确端口的名称替换 prn。

也可以通过用文件名替换 prn,将 dir 命令的输出重定向到文件。还可以键入路径。例如,要将 dir 的输出结果定向到 Records 目录中的 Dir.doc 文件中,可以键入:

dir > \records\dir.doc

如果 Dir.doc 不存在,dir 将创建该文件,除非 Records 目录也不存在。在这种情况下,会出现如下消息:
File creation error

要显示驱动器 C 上所有目录中带 .txt 扩展名的所有文件名的列表,请键入:

dir c:*.txt /w/o/s/p

dir 命令以宽度格式并按字母顺序显示每个目录中匹配文件名的列表,而且每次满屏时暂停,直到您按键继续。
在这里插入图片描述
DOS 指令删除文件:
1: cd 到指定文件夹下
2:del 指令 ,* 后面匹配要删除的文件后缀名
3:回车执行
在这里插入图片描述

代码遍历与批量修改:

#define _CRT_SECURE_NO_WARNINGS //去掉安全检查
#include<stdlib.h>
#include<stdio.h>
#include<string.h>



void main()
{
	char path[100] = "C:\\Users\\whx\\Desktop\\DataBank";
	char info_path[100] = "C:\\Users\\whx\\Desktop\\txt_file.txt";
	char cmd_find[100];

	
	
		remove(info_path);//删除文件
	

	//格式化 DOS 指令 
	sprintf(cmd_find, "dir /b %s\\*.txt >%s", path, info_path);
	system(cmd_find);//执行指令

	char cmd_show[100];
	sprintf(cmd_show, "type %s", info_path);
	system(cmd_show);

	FILE* pfr = fopen(info_path, "r");
	if (pfr == NULL)
	{
		printf("文件打开失败!");
		return;
	}
	char file_name[128];
	while (fgets(file_name,128,pfr))
	{
		char strpath[128] = { 0 };
		int length = strlen(file_name);
		file_name[length - 1] = '\0';//换行符替换
		sprintf(strpath, "%s\\%s", path, file_name);//格式化路径,生成完整文件路径
		printf("%s\n\n", strpath);
		{
			//每个文件添加一段文字:"测试文本批量写入"
			FILE* pfw = fopen(strpath, "a+");//追加文本
			if (pfw == NULL)
			{
				continue;
			}
			fputs("\n测试文本批量写入\n", pfw);
			fclose(pfw);
		}

		char cmd_show[100];
		sprintf(cmd_show, "type %s", strpath);
		system(cmd_show);
	}

	fclose(pfr);
	
	system("pause");
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值