C语言编程笔记:文件处理的艺术

news2025/1/31 3:06:44

大家好,这里是小编的博客频道
小编的博客:就爱学编程

很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!!

本文目录

  • 引言
  • 正文
    • 一、为什么要用文件
    • 二、文件的分类
    • 三、文件指针
    • 四、文件的打开与关闭
      • 1. 文件的打开
      • 2. 文件的关闭
    • 五、文件缓冲区
    • 六、文件的基本操作
      • (1)打开文件
      • (2)关闭文件
      • (3)检测文件末尾和错误
      • (4)清除文件错误标志
    • 七、顺序读写文件
      • (1)字符级操作函数
        • fgetc()
        • fputc()
      • (2)字符串级操作函数
        • fgets()
        • fputs()
      • (3)格式化输入输出函数
        • fprintf()
        • fscanf()
    • 八、随机读写文件
        • (1)文件指针与定位函数
        • 示例代码
          • 示例1:基本随机读写
          • 示例2:使用`ftell`获取当前位置
          • 示例3:二进制文件的随机读写
    • 九、读取错误检查
        • (1)错误检查函数
        • (2)错误处理策略
        • (3)示例代码
          • 示例1:使用`ferror`检查读取错误
          • 示例2:使用`feof`检查文件末尾
    • 十、总结
  • 快乐的时光总是短暂,咱们下篇博文再见啦!!!不要忘了,给小编点点赞和收藏支持一下,在此非常感谢!!!

引言

在C语言编程中,文件操作是数据处理的重要部分。通过文件,我们可以实现数据的持久化存储和共享。下面重点通过多个例子讲清文件的打开和关闭这两个函数。那现在宝子们就跟着小编的步伐一起进入本章知识的学习。Go!Go!Go!

在这里插入图片描述


那接下来就让我们开始遨游在知识的海洋!

正文


一、为什么要用文件

这是因为:

  • 在程序执行过程中,有时需要将数据保存下来供以后使用,或者从外部获取数据进行处理。这时,我们就需要使用到文件。文件是一种用于存储数据的媒介,它可以是磁盘上的物理文件,也可以是内存中的虚拟文件。通过使用文件,我们可以方便地实现数据的长期保存和跨程序的数据共享

二、文件的分类

在C语言中,文件通常按照其内容和用途进行分类,主要包括文本文件二进制文件两种类型:

  1. 文本文件以ASCII码或Unicode码形式存储的文件,主要用于存储人类可读的字符信息,如源代码、文档等。
  1. 二进制文件以二进制形式存储的文件,主要用于存储机器可直接读取和处理的数据,如图像、音频、视频等多媒体文件。

三、文件指针

在C语言中,文件操作是通过文件指针来实现的。 文件指针是一个指向FILE结构体的指针,该结构体包含了文件的各种信息,如文件名、文件位置指示器、文件结束标志等。通过文件指针,我们可以对文件进行各种操作,如读写、定位等。


四、文件的打开与关闭

1. 文件的打开

在C语言中,打开文件需要使用fopen()函数。该函数原型如下:

FILE *fopen(const char *filename, const char *mode);

其中,filename参数是要打开的文件名(包括路径),mode参数指定了文件的打开模式。常见的打开模式有:

  • "r":只读模式。如果文件不存在,则打开失败;如果文件存在,则只能从中读取数据。
  • "w":写模式。如果文件不存在,则以指定的文件名创建新文件;如果文件已存在,则删除原有内容,从头开始写入新数据。
  • "a":追加模式。如果文件不存在,则以指定的文件名创建新文件;如果文件已存在,则在文件末尾追加新数据。
  • "rb""wb""ab":分别表示以二进制方式打开文件,进行读、写、追加操作。

以下是一些使用fopen()函数打开文件的示例:

示例1:以只读模式打开文本文件

#include <stdio.h>

int main() {
    FILE *fp;
    fp = fopen("text.txt", "r"); // 打开名为"text.txt"的文本文件,以只读模式
    if (fp == NULL) {
        printf("无法打开文件
");
        return 1;
    } else {
        printf("文件成功打开
");
        // 在此处可以进行文件读取等操作
        fclose(fp); // 关闭文件
    }
    return 0;
}

示例2:以写模式打开文件

#include <stdio.h>

int main() {
    FILE *fp;
    fp = fopen("output.txt", "w"); // 打开名为"output.txt"的文件,以写模式
    if (fp == NULL) {
        printf("无法打开文件
");
        return 1;
    } else {
        fprintf(fp, "Hello, World!
"); // 向文件中写入字符串
        fclose(fp); // 关闭文件
    }
    return 0;
}

示例3:以追加模式打开文件

#include <stdio.h>

int main() {
    FILE *fp;
    fp = fopen("append.txt", "a"); // 打开名为"append.txt"的文件,以追加模式
    if (fp == NULL) {
        printf("无法打开文件
");
        return 1;
    } else {
        fprintf(fp, "This is a new line.
"); // 向文件末尾追加字符串
        fclose(fp); // 关闭文件
    }
    return 0;
}

示例4:以二进制方式打开文件

#include <stdio.h>

int main() {
    FILE *fp;
    fp = fopen("binaryfile.bin", "rb"); // 打开名为"binaryfile.bin"的文件,以二进制方式读取
    if (fp == NULL) {
        printf("无法打开文件
");
        return 1;
    } else {
        // 在此处可以进行二进制文件的读取等操作
        fclose(fp); // 关闭文件
    }
    return 0;
}

2. 文件的关闭

在完成文件操作后,我们需要使用fclose()函数来关闭文件。该函数原型如下:

int fclose(FILE *stream);

其中,stream参数是一个指向要关闭的文件的指针。fclose()函数会关闭文件,并释放与该文件相关的资源。如果关闭文件时发生错误,则返回非零值(通常为EOF);否则返回0。

以下是一个使用fclose()函数关闭文件的示例:

示例5:关闭文件

#include <stdio.h>

int main() {
    FILE *fp;
    fp = fopen("example.txt", "r"); // 打开一个文件
    if (fp != NULL) {
        // 在此处可以进行文件读取等操作
        if (fclose(fp) != 0) { // 关闭文件,并检查是否成功
            perror("Error closing file"); // 如果关闭失败,打印错误信息
        }
    } else {
        printf("无法打开文件
");
    }
    return 0;
}

需要注意的是:

  • 在使用完文件后一定要及时关闭它,以避免资源泄露和潜在的文件损坏问题。同时,如果在打开文件时使用了fopen()函数并且成功打开了文件,那么在关闭文件时一定要确保传递给fclose()函数的指针是与fopen()返回的指针相同的。

五、文件缓冲区

为了提高文件操作的效率,C语言引入了文件缓冲区的概念。当向文件写入数据时,数据首先被写入到缓冲区中,而不是直接写入到磁盘上。只有当缓冲区满或者显式地调用刷新函数(如fflush())时,缓冲区中的数据才会被写入到磁盘上。同样地,当从文件读取数据时,也是先从磁盘上将数据读取到缓冲区中,然后再从缓冲区中读取数据给程序使用。

这种缓冲区机制可以减少磁盘I/O操作的次数,从而提高文件操作的效率。但是,在某些情况下(如需要立即将数据写入磁盘以确保数据安全时),我们可能需要手动刷新缓冲区或者使用无缓冲的文件操作方式。

综上所述:

  • C语言的文件操作涉及多个方面,包括文件的打开与关闭、读写操作、文件指针的使用以及文件缓冲区的处理等。通过掌握这些基础知识,我们可以更加高效地进行文件操作和数据处理工作。

六、文件的基本操作

(1)打开文件

使用fopen函数可以打开一个文件。函数的原型如下:

FILE *fopen(const char *filename, const char *mode);

其中,filename是文件名(包含路径),mode是文件的打开模式(如读、写等)。

常见的模式有:

"r" : 只读方式打开文件,该文件必须存在。

"w" : 写入方式打开文件,若文件存在则长度被截为0,即该文件内容会消失;若文件不存在则创建新文件。

"a" : 以附加的方式打开文件,写入的数据会被添加到文件尾,即使使用了 fseek 之类的函数也不会改变。

"r+" : 可读写的方式打开文件,该文件必须存在。

"w+" : 可读写方式打开文件,若文件存在则文件长度被截为0,即该文件内容会消失;若文件不存在则创建新文件。

"a+" : 以可读写的方式打开文件,写入的数据会被添加到文件尾。

(2)关闭文件

使用 fclose 函数可以关闭一个已打开的文件。函数的原型如下:

int fclose(FILE *stream);

(3)检测文件末尾和错误

feof(FILE *stream): 检测是否到达文件末尾

ferror(FILE *stream): 检测是否发生读写错误

(4)清除文件错误标志

使用 clearerr 函数可以清除文件错误标志和文件结束标志。函数的原型如下:

void clearerr(FILE *stream);


顺序读写是指按照文件中数据的存储顺序依次进行读写操作

七、顺序读写文件

在C语言中,文件的顺序读写涉及多个函数,这些函数允许我们按照文件中的存储顺序来读取或写入数据。以下是顺序读写相关的函数详细介绍及代码示例:

(1)字符级操作函数

fgetc()

功能:

  • 从指定的文件流中读取下一个字符(一个无符号字符),并将其作为int类型的值返回。如果到达文件末尾(EOF)或发生错误,则返回EOF

原型: int fgetc(FILE *stream);

示例:

#include <stdio.h>
int main() {
   FILE *pf = fopen("text.txt", "r"); // 打开已经创建好的文件
   if (pf == NULL) {
       perror("fopen");
       return 1;
   }
   // 读文件
   int ret = fgetc(pf);
   printf("%c


", ret);
ret = fgetc(pf);
printf("%c
", ret);
ret = fgetc(pf);
printf("%c
", ret);
// 关闭文件
fclose(pf);
pf = NULL;
return 0;
}

fputc()

功能:

  • 将一个字符写入到指定的文件流中。

原型:int fputc(int character, FILE *stream);

示例:

#include <stdio.h>
int main() {
    FILE *pf = fopen("text.txt", "w"); // 以写模式打开文件
    if (pf == NULL) {
        perror("fopen");
        return 1;
    }
    // 写文件
    fputc('a', pf);
    fputc('b', pf);
    fputc('c', pf);
    // 关闭文件
    fclose(pf);
    pf = NULL;
    return 0;
}
 

(2)字符串级操作函数

fgets()

功能:

  • 从指定的文件流中读取一行文本(包括换行符,如果有的话,但最多读取到数组大小减一的位置),并将其存储在字符串中。如果成功,它会返回一个指向该字符串的指针;如果发生错误或到达文件末尾(EOF)而没有读取任何字符,则返回NULL

原型: char *fgets(char *string, int n, FILE *stream);

示例:

#include <stdio.h>
int main() {
    char arr[10] = {0};
    FILE *pf = fopen("text.txt", "r"); // 以读模式打开文件
    if (pf == NULL) {
        perror("fopen");
        return 1;
    }
    // 读文件
    fgets(arr, sizeof(arr), pf);
    printf("%s
 

", arr);
// 关闭文件
fclose(pf);
pf = NULL;
return 0;
}

fputs()

功能:

  • 将字符串写入到指定的文件流中,但不包括空字符’\0’。如果成功,它返回非负值;如果发生错误,则返回EOF。

原型: int fputs(const char *string, FILE *stream);

示例:

#include <stdio.h>
int main() {
    FILE *pf = fopen("text.txt", "w"); // 以写模式打开文件
    if (pf == NULL) {
        perror("fopen");
        return 1;
    }
    // 写文件
    fputs("Hello, World!
 

", pf);
// 关闭文件
fclose(pf);
pf = NULL;
return 0;
}

(3)格式化输入输出函数

fprintf()

功能:

  • 向指定的输出流(如文件)写入格式化的数据。

原型: int fprintf(FILE *stream, const char *format[, argument]...);

示例:

#include <stdio.h>
struct S {
   char arr[10];
   int num;
   float sc;
};
int main() {
   struct S s = {"abcde", 10, 5.5f};
   FILE *pf = fopen("text.txt", "w"); // 以写模式打开文件
   if (pf == NULL) {
       perror("fopen");
       return 1;
   }
   // 写文件
   fprintf(pf, "%s %d %f", s.arr, s.num, s.sc);
   // 关闭文件
   fclose(pf);
   pf = NULL;
   return 0;
}
fscanf()

功能:

  • 从指定的输入流(如文件)中按照指定格式读取数据。

原型: int fscanf(FILE *stream, const char *format[, argument]...);

示例:

#include <stdio.h>
struct S {
   char arr[10];
   int num;
   float sc;
};
int main() {
   struct S s = {0};
   FILE *pf = fopen("text.txt", "r"); // 以读模式打开文件
   if (pf == NULL) {
       perror("fopen");
       return 1;
   }
   // 读文件
   fscanf(pf, "%s %d %f", s.arr, &(s.num), &(s.sc));
   // 打印
   printf("%s %d %f


", s.arr, s.num, s.sc);
// 关闭文件
fclose(pf);
pf = NULL;
return 0;
}

在C语言中,文件的随机读写是指能够在文件的任意位置进行读取或写入数据,而不仅仅是顺序地从头到尾处理文件。这种能力在处理大型数据文件时尤为重要,因为它允许程序高效地访问和修改文件中的特定部分。

八、随机读写文件

(1)文件指针与定位函数

要实现文件的随机读写,首先需要了解几个关键概念:

  1. 文件指针:用于标识打开的文件及其在存储设备上的当前位置。

  2. 定位函数:如fseek()ftell()rewind()等,用于移动文件指针到指定位置或获取当前位置。

  • fseek(FILE *stream, long offset, int whence):将文件指针移动到相对于某个位置的偏移量处。
  • whence可以是SEEK_SET(文件开头)、SEEK_CUR(当前位置)或SEEK_END(文件末尾)。
  • ftell(FILE *stream):返回当前文件指针的位置(相对于文件开头的字节数)。
  • rewind(FILE *stream):将文件指针重新定位到文件的开头。
示例代码

以下是一些具体的例子,展示了如何在C语言中进行文件的随机读写操作。

示例1:基本随机读写
#include <stdio.h>
#include <stdlib.h>

int main() {
    FILE *file = fopen("example.txt", "w+");
    if (!file) {
        perror("Failed to open file");
        return EXIT_FAILURE;
    }

    // 写入一些初始数据
    fprintf(file, "Hello, World!
This is a test.
");

    // 移动到文件的第7个字节处(索引从0开始)
    fseek(file, 6, SEEK_SET);
    // 在此处写入新字符
    fputc('C', file);

    // 重置文件指针到文件开头
    rewind(file);

    // 读取并打印文件内容
    char buffer[100];
    while (fgets(buffer, sizeof(buffer), file)) {
        printf("%s", buffer);
    }

    fclose(file);
    return EXIT_SUCCESS;
}

在这个例子中,我们打开了一个名为example.txt的文件,写入了初始数据,然后将文件指针移动到第7个字节处(即'H''e'之间),并将该位置的字符替换为'C'。最后,重置文件指针并打印整个文件的内容。

示例2:使用ftell获取当前位置
#include <stdio.h>
#include <stdlib.h>

int main() {
    FILE *file = fopen("numbers.txt", "w+");
    if (!file) {
        perror("Failed to open file");
        return EXIT_FAILURE;
    }

    // 写入一系列数字
    for (int i = 0; i < 10; ++i) {
        fprintf(file, "%d
", i);
    }

    // 移动到文件的第5行(实际上是第4个换行符之后)
    fseek(file, 4 * (sizeof(int) + 1), SEEK_SET); // 假设每个数字和换行符占用固定大小的空间

    // 获取当前文件指针位置
    long position = ftell(file);
    printf("Current file pointer position: %ld
", position);

    // 从当前位置继续写入
    fprintf(file, "Inserted Number
");

    // 重置文件指针并打印文件内容
    rewind(file);
    char buffer[100];
    while (fgets(buffer, sizeof(buffer), file)) {
        printf("%s", buffer);
    }

    fclose(file);
    return EXIT_SUCCESS;
}

这个例子中,我们创建了一个包含数字的文件,然后尝试在第5行的位置插入一个新字符串。注意,这里对文件指针的移动是基于假设的固定大小的数字和换行符,实际应用中可能需要更精确的计算或使用其他方法来确定正确的偏移量。

示例3:二进制文件的随机读写
#include <stdio.h>
#include <stdlib.h>

typedef struct {
    int id;
    float value;
} Record;

int main() {
    FILE *file = fopen("records.bin", "wb+");
    if (!file) {
        perror("Failed to open file");
        return EXIT_FAILURE;
    }

    // 写入一些记录
    Record records[] = {{1, 1.1}, {2, 2.2}, {3, 3.3}};
    fwrite(records, sizeof(Record), 3, file);

    // 移动到第二条记录的位置(索引从0开始)
    fseek(file, sizeof(Record), SEEK_SET);

    // 读取并修改第二条记录
    Record temp;
    fread(&temp, sizeof(Record), 1, file);
    temp.value += 10.0;

    // 将修改后的记录写回原位置(覆盖旧记录)
    fseek(file, -sizeof(Record), SEEK_CUR); // 或者直接使用之前的ftell结果
    fwrite(&temp, sizeof(Record), 1, file);

    // 重置文件指针并验证内容(这里仅为了演示,实际应关闭文件后重新打开读取)
    rewind(file);
    Record readRecords[3];
    fread(readRecords, sizeof(Record), 3, file);

    for (int i = 0; i < 3; ++i) {
        printf("ID: %d, Value: %.2f
", readRecords[i].id, readRecords[i].value);
    }

    fclose(file);
    return EXIT_SUCCESS;
}
  • 在这个例子中,我们处理一个二进制文件,其中存储了结构体数组。我们展示了如何移动到特定的记录位置,读取它,进行修改,然后再将其写回到文件中。注意,由于我们在同一文件流中进行了读取和写入操作而没有关闭再重新打开文件,这里的验证步骤在实际应用中可能不准确;通常,你应该在修改完文件后关闭它,并在需要时以只读模式重新打开它以验证更改。

在C语言中,对文件进行读写操作时,进行错误检查是至关重要的。这不仅可以确保数据的完整性,还能提高程序的健壮性和可靠性。本文将详细介绍C语言文件操作中如何进行读取错误检查,并通过多个例子加以说明。

九、读取错误检查

(1)错误检查函数

C语言提供了几个函数来检查文件操作的错误状态:

  1. ferror:用于检查文件流上的最后一个I/O操作是否出错。其原型为int ferror(FILE *stream);。如果返回非零值,则表示发生了错误。
  1. perror:用于打印描述最近一次错误的字符串。其原型为void perror(const char *s);。其中,s是一个用户提供的错误信息前缀,通常用于指示发生错误的上下文。
  1. feof:用于检查是否已经到达文件末尾。其原型为int feof(FILE *stream);。如果返回非零值,则表示已经到达文件末尾。
(2)错误处理策略

在进行文件操作时,应该遵循以下错误处理策略:

  1. 在每次调用文件操作函数后,立即检查其返回值或错误状态。
  1. 如果发现错误,根据具体情况采取适当的措施,如打印错误信息、清理资源并退出程序等。
  1. 使用clearerr函数清除文件流的错误标志和文件结束标志,以便进行下一轮的文件操作。
(3)示例代码

以下是几个使用上述函数进行文件读取错误检查的示例代码:

示例1:使用ferror检查读取错误
#include <stdio.h>

int main() {
    FILE *fp = fopen("sample.txt", "r");
    if (fp == NULL) {
        perror("Failed to open file");
        return 1;
    }

    char buffer[100];
    size_t bytesRead = fread(buffer, sizeof(char), sizeof(buffer) - 1, fp);
    if (ferror(fp)) {
        perror("Error reading file");
        fclose(fp);
        return 1;
    }

    // 确保缓冲区以null字符结尾
    buffer[bytesRead] = '\0';
    printf("Read from file: %s
", buffer);

    fclose(fp);
    return 0;
}

在这个例子中,我们尝试从一个名为sample.txt的文件中读取数据。如果在读取过程中发生错误,我们使用ferror函数进行检查,并使用perror函数打印错误信息。

示例2:使用feof检查文件末尾
#include <stdio.h>

int main() {
    FILE *fp = fopen("numbers.txt", "r");
    if (fp == NULL) {
        perror("Failed to open file");
        return 1;
    }

    int number;
    while (!feof(fp)) {
        if (fscanf(fp, "%d", &number) != 1) {
            // 检查是否是因为到达文件末尾而失败
            if (!feof(fp) && ferror(fp)) {
                perror("Error reading number from file");
                fclose(fp);
                return 1;
            }
            // 如果是文件末尾,则跳出循环
            break;
        }
        printf("Read number: %d
", number);
    }

    fclose(fp);
    return 0;
}

在这个例子中,我们尝试从一个名为numbers.txt的文件中读取整数。我们使用feof函数来检查是否已经到达文件末尾,同时使用ferror函数来检查是否发生了其他读取错误。


十、总结

顺序读写按照文件中数据的存储顺序依次进行读写操作,常用函数有 fprintf , fscanf , fgets , fputs等。

随机读写可以在文件中的任意位置进行读写操作,常用函数有fseek , ftell , rewind

错误检查在进行文件操作时,应始终检查返回值并使用 feof ferror 来检测是否到达文件末尾或发生错误。


快乐的时光总是短暂,咱们下篇博文再见啦!!!不要忘了,给小编点点赞和收藏支持一下,在此非常感谢!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2284251.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何编写一个MyBatis插件?

大家好&#xff0c;我是锋哥。今天分享关于【Redis为什么这么快?】面试题。希望对大家有帮助&#xff1b; 如何编写一个MyBatis插件&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 编写 MyBatis 插件需要使用 MyBatis 提供的插件接口&#xff0c;MyBa…

C语言初阶牛客网刷题—— HJ34 图片整理【难度:中等】

1. 题目描述 牛客网在线OJ链接 Lily上课时使用字母数字图片教小朋友们学习英语单词&#xff0c;每次都需要把这些图片按照大小&#xff08;ASCII码值从小到大&#xff09;排列收好。请大家给Lily帮忙&#xff0c;通过C语言解决。 输入描述&#xff1a;Lily使用的图片包括 “A…

Golang Gin系列-7:认证和授权

在本章中&#xff0c;我们将探讨Gin框架中身份验证和授权的基本方面。这包括实现基本的和基于令牌的身份验证&#xff0c;使用基于角色的访问控制&#xff0c;应用中间件进行授权&#xff0c;以及使用HTTPS和漏洞防护保护应用程序。 实现身份认证 Basic 认证 Basic 认证是内置…

CVE-2025-0411 7-zip 漏洞复现

文章目录 免责申明漏洞描述影响版本漏洞poc漏洞复现修复建议 免责申明 本文章仅供学习与交流&#xff0c;请勿用于非法用途&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任 漏洞描述 此漏洞 &#xff08;CVSS SCORE 7.0&#xff09; 允许远程攻击者绕…

学习数据结构(1)时间复杂度

1.数据结构和算法 &#xff08;1&#xff09;数据结构是计算机存储、组织数据的方式&#xff0c;指相互之间存在⼀种或多种特定关系的数据元素的集合 &#xff08;2&#xff09;算法就是定义良好的计算过程&#xff0c;取一个或一组的值为输入&#xff0c;并产生出一个或一组…

算法每日双题精讲 —— 二分查找(寻找旋转排序数组中的最小值,点名)

&#x1f31f;快来参与讨论&#x1f4ac;&#xff0c;点赞&#x1f44d;、收藏⭐、分享&#x1f4e4;&#xff0c;共创活力社区。 &#x1f31f; 别再犹豫了&#xff01;快来订阅我们的算法每日双题精讲专栏&#xff0c;一起踏上算法学习的精彩之旅吧&#x1f4aa; 在算法的…

STM32-时钟树

STM32-时钟树 时钟 时钟

算法知识补充2

一部分&#xff1a;Tire树&#xff1a;高效地存储和查找字符串集合的数据结构acwing835 #include<iostream> #include<cstring> using namespace std; const int N100010; int son[N][26],cnt[N],idx; char str[N]; void insert(char str[]){int p0;for(int i0;st…

微信小程序-点餐(美食屋)02开发实践

目录 概要 整体架构流程 &#xff08;一&#xff09;用户注册与登录 &#xff08;二&#xff09;菜品浏览与点餐 &#xff08;三&#xff09;订单管理 &#xff08;四&#xff09;后台管理 部分代码展示 1.index.wxml 2.list.wxml 3.checkout.wxml 4.detail.wxml 小结优点 概要…

WPF基础 | WPF 常用控件实战:Button、TextBox 等的基础应用

WPF基础 | WPF 常用控件实战&#xff1a;Button、TextBox 等的基础应用 一、前言二、Button 控件基础2.1 Button 的基本定义与显示2.2 按钮样式设置2.3 按钮大小与布局 三、Button 的交互功能3.1 点击事件处理3.2 鼠标悬停与离开效果3.3 按钮禁用与启用 四、TextBox 控件基础4.…

CentOS7使用源码安装PHP8教程整理

CentOS7使用源码安装PHP8教程整理 下载安装包解压下载的php tar源码包安装所需的一些依赖扩展库安装前的配置修改配置文件1、进入php8的安装包 配置环境变量开机自启启动服务创建软连接常见问题1、checking for icu-uc > 50.1 icu-io icu-i18n... no2、configure: error: Pa…

08-Elasticsearch

黑马商城作为一个电商项目&#xff0c;商品的搜索肯定是访问频率最高的页面之一。目前搜索功能是基于数据库的模糊搜索来实现的&#xff0c;存在很多问题。 首先&#xff0c;查询效率较低。 由于数据库模糊查询不走索引&#xff0c;在数据量较大的时候&#xff0c;查询性能很…

SQL在DBA手里-改写篇

背景 最近运营需要做月报汇总交易情况&#xff0c;之前一直是他们手工出的数据&#xff0c;他们想做成月初自动发送邮件&#xff0c;从而减轻他们的工作量。于是他们提供SQL我们在邮件服务器配置做定时发送任务。 表介绍&#xff08;表及字段已做脱敏处理&#xff09; trans…

企业财务管理系统的需求设计和实现

该作者的原创文章目录&#xff1a; 生产制造执行MES系统的需求设计和实现 企业后勤管理系统的需求设计和实现 行政办公管理系统的需求设计和实现 人力资源管理HR系统的需求设计和实现 企业财务管理系统的需求设计和实现 董事会办公管理系统的需求设计和实现 公司组织架构…

Couchbase UI: Server

在 Couchbase UI 中的 Server&#xff08;服务器&#xff09;标签页主要用于管理和监控集群中的各个节点。以下是 Server 标签页的主要内容和功能介绍&#xff1a; 1. 节点列表 显示集群中所有节点的列表&#xff0c;每个节点的详细信息包括&#xff1a; 节点地址&#xff1…

【软件设计师中级】-笔记缩减版本-计算机系统基础知识

1. 计算机系统基础知识 1.1. 计算机系统硬件基本组成硬件 中央处理器&#xff08;CPU&#xff09;硬件系统的核心 运算器 控制器 存储器&#xff08;记忆设备&#xff09; 内部存储器&#xff08;速度高&#xff0c;容量小&#xff09;&#xff1a;临时存放程序、数据及中间结…

SAP MM 记录一次SAP外协采购收货提示 这种物料的特殊库存 O 0100003359 14019002不存在的问题

根据采购订单收货&#xff0c;调用时 BAPI_GOODSMVT_CREATE时返回 { "TYPE":"E", "ID":"M7", "NUMBER":"076", "MESSAGE":"这种物料的特殊库存 O 0100003359 14019002不存在"…

在 Ubuntu22.04 上安装 Splunk

ELK感觉太麻烦了&#xff0c;换个日志收集工具 Splunk 是一种 IT 工具&#xff0c;可帮助在任何设备上收集日志、分析、可视化、审计和创建报告。简单来说&#xff0c;它将“机器生成的数据转换为人类可读的数据”。它支持从虚拟机、网络设备、防火墙、基于 Unix 和基于 Windo…

计算机网络 (60)蜂窝移动通信网

一、定义与原理 蜂窝移动通信网是指将一个服务区分为若干蜂窝状相邻小区并采用频率空间复用技术的移动通信网。其原理在于&#xff0c;将移动通信服务区划分成许多以正六边形为基本几何图形的覆盖区域&#xff0c;称为蜂窝小区。每个小区设置一个基站&#xff0c;负责本小区内移…

壁纸设计过程中如何增加氛围感

在壁纸设计过程中&#xff0c;增加氛围感是提升整体视觉效果和情感传达的关键。以下是一些具体的方法和技巧&#xff0c;帮助你在设计中营造出强烈的氛围感&#xff1a; 一、色彩运用 选择主题色&#xff1a; 根据你想要传达的情感选择主色调。例如&#xff0c;温暖的色调&…