#include <stdio.h> #include <stdlib.h> #include <string.h>
// 定义最大行长度和缓冲区大小 #define MAX_LINE_LENGTH 1024 #define BUFFER_SIZE 10240
// 读取文件内容并显示 void readFile(char *filename) { FILE *file = fopen(filename, "r"); if (file == NULL) { printf("无法打开文件 %s\n", filename); return; }
char line[MAX_LINE_LENGTH];
while (fgets(line, MAX_LINE_LENGTH, file)!= NULL) {
printf("%s", line);
}
fclose(file);
}
// 输入内容并保存到文件 void writeFile(char *filename) { FILE *file = fopen(filename, "w"); if (file == NULL) { printf("无法创建或打开文件 %s 进行写入\n", filename); return; }
printf("输入要保存的内容,输入'q'结束输入:\n");
char line[MAX_LINE_LENGTH];
while (1) {
printf("> ");
fgets(line, MAX_LINE_LENGTH, stdin);
line[strcspn(line, "\n")] = '\0'; // 去除换行符
if (strcmp(line, "q") == 0) {
break;
}
fprintf(file, "%s\n", line);
}
fclose(file);
}
// 删除文件内容 void deleteFileContent(char *filename) { FILE *file = fopen(filename, "w"); if (file == NULL) { printf("无法打开文件 %s 进行删除操作\n", filename); return; } fclose(file); printf("文件内容已删除\n"); }
// 在文件末尾添加内容 void appendToFile(char *filename) { FILE *file = fopen(filename, "a"); if (file == NULL) { printf("无法打开文件 %s 进行添加操作\n", filename); return; }
printf("输入要添加的内容,输入'q'结束输入:\n");
char line[MAX_LINE_LENGTH];
while (1) {
printf("> ");
fgets(line, MAX_LINE_LENGTH, stdin);
line[strcspn(line, "\n")] = '\0'; // 去除换行符
if (strcmp(line, "q") == 0) {
break;
}
fprintf(file, "%s\n", line);
}
fclose(file);
}
// 对文件内容进行排序(假设按字符串升序) void sortFileContent(char *filename) { FILE *file = fopen(filename, "r"); if (file == NULL) { printf("无法打开文件 %s 进行排序操作\n", filename); return; }
char lines[BUFFER_SIZE][MAX_LINE_LENGTH];
int lineCount = 0;
char line[MAX_LINE_LENGTH];
while (fgets(line, MAX_LINE_LENGTH, file)!= NULL) {
strcpy(lines[lineCount], line);
lineCount++;
}
fclose(file);
for (int i = 0; i < lineCount - 1; i++) {
for (int j = 0; j < lineCount - i - 1; j++) {
if (strcmp(lines[j], lines[j + 1]) > 0) {
char temp[MAX_LINE_LENGTH];
strcpy(temp, lines[j]);
strcpy(lines[j], lines[j + 1]);
strcpy(lines[j + 1], temp);
}
}
}
file = fopen(filename, "w");
if (file == NULL) {
printf("无法打开文件 %s 进行写入排序后内容\n", filename);
return;
}
for (int i = 0; i < lineCount; i++) {
fprintf(file, "%s", lines[i]);
}
fclose(file);
printf("文件内容已排序\n");
}
// 修改文件中的指定行 void modifyFileLine(char *filename, int lineNumber) { FILE *file = fopen(filename, "r"); if (file == NULL) { printf("无法打开文件 %s 进行修改操作\n", filename); return; }
char lines[BUFFER_SIZE][MAX_LINE_LENGTH];
int lineCount = 0;
char line[MAX_LINE_LENGTH];
while (fgets(line, MAX_LINE_LENGTH, file)!= NULL) {
strcpy(lines[lineCount], line);
lineCount++;
}
fclose(file);
if (lineNumber < 1 || lineNumber > lineCount) {
printf("无效的行号\n");
return;
}
printf("输入修改后的内容:\n");
printf("> ");
fgets(line, MAX_LINE_LENGTH, stdin);
line[strcspn(line, "\n")] = '\0'; // 去除换行符
strcpy(lines[lineNumber - 1], line);
file = fopen(filename, "w");
if (file == NULL) {
printf("无法打开文件 %s 进行写入修改后内容\n", filename);
return;
}
for (int i = 0; i < lineCount; i++) {
fprintf(file, "%s", lines[i]);
}
fclose(file);
printf("指定行已修改\n");
}
int main() { int choice; char filename[100];
do {
printf("1. 读取文件\n");
printf("2. 输入并保存到文件\n");
printf("3. 删除文件内容\n");
printf("4. 在文件末尾添加内容\n");
printf("5. 对文件内容排序\n");
printf("6. 修改文件中的指定行\n");
printf("7. 显示文件内容\n");
printf("8. 退出\n");
printf("请选择操作: ");
scanf("%d", &choice);
printf("请输入文件名: ");
scanf("%s", filename);
switch (choice) {
case 1:
readFile(filename);
break;
case 2:
writeFile(filename);
break;
case 3:
deleteFileContent(filename);
break;
case 4:
appendToFile(filename);
break;
case 5:
sortFileContent(filename);
break;
case 6:
int lineNumber;
printf("请输入要修改的行号: ");
scanf("%d", &lineNumber);
modifyFileLine(filename, lineNumber);
break;
case 7:
readFile(filename);
break;
case 8:
printf("退出程序\n");
return 0;
default:
printf("无效的选择\n");
break;
}
} while (1);
return 0;
}