一、C语言进阶:文件操作

2023-11-02

1 文件操作

1.1 文件的输入输出

输出:使用printf()和命令行重定向>实现文件输出;
输入:使用scanf()和命令行重定向<实现文件输入。

#include <stdio.h>
//printf() 写入文件 ./a.out > hello.txt
//scanf() 从文件读 ./a.out < hello.txt
int main(){
    char name[20];
    scanf("%s",name);
    printf("Hello %s!\n",name);
}

1.2 文件打开fopen()和关闭fclose()

fopen()函数原型:

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

restrict C99标准才引进的,属于类型修饰符,表示修饰的这块内存空间只能被这个指针引用和修改,除此之外别无他法。

如果文件顺利打开,则返回值是指向这个文件流的文件指针,如果文件打开失败,返回NULL。

  • filename:需要打开的文件
  • mode:打开方式
    mode的几种类型
    1、r: 读
    2、w: 写
    3、a: 追加
    4、+: 读或写,配合r、w、a使用
    5、t: 文本文件
    6、b: 二进制文件
    注:a只能追加不能修改,w会把文件清空,r+读写方式可以修改文件原有内容。

fclose()函数原型:

int flcose(FILE* stream);

stream: 函数指针
返回值:成功返回0,否则返回-1

1.3 文本读写fprintf()fscanf()

  • 函数原型
int fprintf(FILE *stream, char *format, argument...);
int fscanf(FILE *stream, char *format, argument... );

fprintf()/fscanf()printf()/scanf()使用非常相似,区别在于fprintf()/fscanf()第一个参数stream是文件描述符。

  • 实例:
#include <stdio.h>
int main(){
    char name[20];
    fscanf(stdin,"%s",name); //stdin标准读,从终端读
    fprintf(stdout,"Hello %s!\n",name); //stdout标准写,向终端写
}

  • 实例:学生信息的读入读出
#include <stdio.h>
typedef struct{
    char name[20];
    int age;
    float score;
} Stu;
int main(){
    FILE* pfile = fopen("./student","r");
    if(NULL == pfile){
        printf("file is not exited!\n");
        return 1;
    }
    int n;
    fscanf(pfile,"%d",&n);
    Stu s[n];
    for(int i = 0;i < n;++i){
        fscanf(pfile,"%s%d%f",&s[i].name,&s[i].age,&s[i].score);
    }
    fclose(pfile);
    pfile = NULL;

    FILE* pfile2 = fopen("./student2","w");
    if(NULL == pfile2){
        printf("file ./student2 is not exited!\n");
        return 1;
    }
    for(int i = 0;i < n;++i){
        fprintf(pfile2,"%s %d %.2f\n",s[i].name,s[i].age,s[i].score);
    }
    fclose(pfile2);
    pfile2 = NULL;
}
  • 学生信息管理: 采用fprintf()fscanf() 实现增删查改
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
typedef struct{
    char name[20];
    int age;
    float score;
} Stu;
bool Load(const char* path,Stu* s,int* n){
    FILE* file = fopen(path,"r");
    if(NULL == file){
    	printf("file is not exited!\n");
	return false;
    }
    int m;
    fscanf(file,"%d",&m);
    *n = m;
    for(int i = 0;i < m;++i){
    	fscanf(file,"%s%d%f",&s[i].name,&s[i].age,&s[i].score);
    }
    fclose(file);
    file = NULL;
    return true;
}
void ShowStudents(Stu* s,int n){
    for(int i = 0;i < n;++i){
        printf("%s %d %f\n",s[i].name,s[i].age,s[i].score);
    }
}
void SaveStudents(const char* path,Stu* s,int* n){
    FILE* file = fopen(path,"w");
    if(NULL == file){
    	printf("file is not exited!\n");
	return;
    }
    fprintf(file,"%d\n",*n);
    for(int i = 0;i < *n;++i){
    	fprintf(file,"%s %d %f\n",s[i].name,s[i].age,s[i].score);
    }
    fclose(file);
    file = NULL;
}
void Register(const char* path,Stu* s,int* n){
    int before = *n;
    printf("请输入录入学生个数:");
    int append_num;
    scanf("%d",&append_num);
    *n += append_num;
    printf("请依次输入学生姓名,年龄和成绩:\n");
    for(int i = before;i < *n;++i){
    	scanf("%s%d%f",&s[i].name,&s[i].age,&s[i].score);
    }
    SaveStudents(path,s,n);
}
int cmp(const void* a,const void* b){
    return ((Stu*)(a))->score < ((Stu*)(b))->score?1:-1;
}
void SortStudents(Stu* s,int n){
    qsort(s,n,sizeof(Stu),cmp);
    ShowStudents(s,n);
}
void SearchStudents(Stu* s,int n){
    printf("请输入学生姓名:");
    char name[20];
    scanf("%s",name);
    bool found = false;
    for(int i = 0;i < n;++i){
    	if(strcmp(name,s[i].name) == 0){
	    found = true;
	    printf("查询结果:%s %d %f\n",s[i].name,s[i].age,s[i].score);
	}
    }
    if(!found){
    	printf("查无此人!\n");
    }
}
void DeleteStudents(const char* path,Stu* s,int* n){
    printf("请输入学生姓名:");
    char name[20];
    scanf("%s",name);
    bool found = false;
    for(int i = 0;i < *n;++i){
    	if(strcmp(name,s[i].name) == 0){
	    found = true;
	    for(int j = i+1;j < *n;++j){
	    	s[i++] = s[j];
	    }
	    *n -= 1;
	    printf("删除成功!\n");
	    break;
	}
    }
    if(!found){
    	printf("查无此人!\n");
	return;
    }
    SaveStudents(path,s,n);
}

void ModifyStudents(const void* path,Stu* s,int n){
    printf("请输入学生姓名:");
    char name[20];
    scanf("%s",name);
    bool found = false;
    for(int i = 0;i < n;++i){
    	if(strcmp(name,s[i].name) == 0){
	    found = true;
	    printf("请依次输入修改后的信息:姓名 年龄 成绩\n");
	    scanf("%s%d%f",&s[i].name,&s[i].age,&s[i].score);
	    break;
	}
    }
    if(!found){
    	printf("查无此人!\n");
	return;
    }
    SaveStudents(path,s,&n);
}
int main(){
    const char* data = "./student.txt";
    Stu s[10];
    int n;
    if(Load(data,s,&n)){
    	printf("已经加载%d名学生信息\n",n);  
    }
    while(true){
    	printf("功能列表:\n");
		printf("1.查看所有学生信息\n");
		printf("2.录入学生信息\n");
		printf("3.按成绩排序\n");
		printf("4.查询学生信息\n");
		printf("5.删除学生信息\n");
		printf("6.修改学生信息 \n");
		printf("0.退出\n");
	int num;
	scanf("%d",&num);
	switch(num){
	    case 1: 
			ShowStudents(s,n);
			break;
 	    case 2:
	        Register(data,s,&n);
			break;
	    case 3:
			SortStudents(s,n);
	        break;
	    case 4:
			SearchStudents(s,n);
			break;
	    case 5:
			DeleteStudents(data,s,&n);
			break;
	    case 6:
			ModifyStudents(data,s,n);
			break;
	   	case 0:
			return 0;
	}
    }
}

1.4 二进制读和写:fread()和fwrite()

  • 函数原型
size_t fread(void *ptr, size_t size, size_t count, FILE* stream);
size_t fwrite(void *ptr, size_t size, size_t count, FILE* stream);

ptr: 一个指针,在fread()中是从文件里读入的数据存放的地址;在fwrite()中是写入到文件里的数据存放的地址。

ptr 指针,在fread()中是从文件里读入的数据存放的地址;在fwrite()中是写入到文件里的数据存放的地址
size 每次要读写的字节数
count 读写的次数
stream 文件指针
  • 返回值:成功读取/写入的字节数
  • 实例:fread()和fwrite()实现文件读和写
#include <stdio.h>
#include <string.h>
int main(){
    FILE* fp= fopen("./hello.txt","rw");
    char str[] = "Hello World";
    fwrite(str,sizeof(str),1,fp);
    char str1[20];
    fread(str1,sizeof(str1),1,fp);
    printf("%s\n",str1);
}
  • 学生信息管理: 采用fread()和fwrite() 实现增删查改
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
typedef struct{
    char name[20];
    int age;
    float score;
} Stu;
bool Load(const char* path,Stu* s,int* n){
    FILE* file = fopen(path,"rb");
    if(NULL == file){
    	printf("file is not exited!\n");
	return false;
    }
    int m;
    fread(&m,sizeof(m),1,file);
    //fscanf(file,"%d",&m);
    *n = m;
    fread(s,sizeof(Stu),m,file);
    /*
    for(int i = 0;i < m;++i){
    	fscanf(file,"%s%d%f",&s[i].name,&s[i].age,&s[i].score);
    }
    */
    fclose(file);
    file = NULL;
    return true;
}
void ShowStudents(Stu* s,int n){
    for(int i = 0;i < n;++i){
        printf("%s %d %f\n",s[i].name,s[i].age,s[i].score);
    }
}
void SaveStudents(const char* path,Stu* s,int n){
    FILE* file = fopen(path,"wb");
    if(NULL == file){
    	printf("file is not exited!\n");
	return;
    }
    fwrite(&n,sizeof(n),1,file);
    //fprintf(file,"%d\n",*n);
    fwrite(s,sizeof(Stu),n,file);
    /*
    for(int i = 0;i < *n;++i){
    	fprintf(file,"%s %d %f\n",s[i].name,s[i].age,s[i].score);
    }
    */
    fclose(file);
    file = NULL;
}
void Register(const char* path,Stu* s,int* n){
    int before = *n;
    printf("请输入录入学生个数:");
    int append_num;
    scanf("%d",&append_num);
    *n += append_num;
    printf("请依次输入学生姓名,年龄和成绩:\n");
    for(int i = before;i < *n;++i){
    	scanf("%s%d%f",&s[i].name,&s[i].age,&s[i].score);
    }
    SaveStudents(path,s,*n);
}
int cmp(const void* a,const void* b){
    return ((Stu*)(a))->score < ((Stu*)(b))->score?1:-1;
}
void SortStudents(Stu* s,int n){
    qsort(s,n,sizeof(Stu),cmp);
    ShowStudents(s,n);
}
void SearchStudents(Stu* s,int n){
    printf("请输入学生姓名:");
    char name[20];
    scanf("%s",name);
    bool found = false;
    for(int i = 0;i < n;++i){
    	if(strcmp(name,s[i].name) == 0){
	    found = true;
	    printf("查询结果:%s %d %f\n",s[i].name,s[i].age,s[i].score);
	}
    }
    if(!found){
    	printf("查无此人!\n");
    }
}
void DeleteStudents(const char* path,Stu* s,int* n){
    printf("请输入学生姓名:");
    char name[20];
    scanf("%s",name);
    bool found = false;
    for(int i = 0;i < *n;++i){
    	if(strcmp(name,s[i].name) == 0){
	    found = true;
	    for(int j = i+1;j < *n;++j){
	    	s[i++] = s[j];
	    }
	    *n -= 1;
	    printf("删除成功!\n");
	    break;
	}
    }
    if(!found){
    	printf("查无此人!\n");
	return;
    }
    SaveStudents(path,s,*n);
}

void ModifyStudents(const void* path,Stu* s,int n){
    printf("请输入学生姓名:");
    char name[20];
    scanf("%s",name);
    bool found = false;
    for(int i = 0;i < n;++i){
    	if(strcmp(name,s[i].name) == 0){
	    found = true;
	    printf("请依次输入修改后的信息:姓名 年龄 成绩\n");
	    scanf("%s%d%f",&s[i].name,&s[i].age,&s[i].score);
	    break;
	}
    }
    if(!found){
    	printf("查无此人!\n");
	return;
    }
    SaveStudents(path,s,n);
}
int main(){
    const char* data = "./student2.dat";
    Stu s[10];
    int n;
    if(Load(data,s,&n)){
    	printf("已经加载%d名学生信息\n",n);  
    }
    while(true){
    	printf("功能列表:\n");
		printf("1.查看所有学生信息\n");
		printf("2.录入学生信息\n");
		printf("3.按成绩排序\n");
		printf("4.查询学生信息\n");
		printf("5.删除学生信息\n");
		printf("6.修改学生信息 \n");
		printf("0.退出\n");
	int num;
	scanf("%d",&num);
	switch(num){
	    case 1: 
			ShowStudents(s,n);
			break;
 	    case 2:
	        Register(data,s,&n);
			break;
	    case 3:
			SortStudents(s,n);
	        break;
	    case 4:
			SearchStudents(s,n);
			break;
	    case 5:
			DeleteStudents(data,s,&n);
			break;
	    case 6:
			ModifyStudents(data,s,n);
			break;
	    case 0:
			return 0;
	}
    }
}

注:读取文件须为二进制文件.dat

1.5 文件定位:ftell()fseek()

  • 函数原型
// 获取位置
long ftell(FILE* stream);
// 设置位置
int fseek(FILE* stream,long offset,int whence);
  • 参数
stream 文件指针
offset 基于起始点的偏移量
whence 起始点

whence的集中状态及含义:

whence 数值 含义
SEEK_SET 0 从头开始
SEEK_CUR 1 从当前开始
SEEK_END 2 从结束开始
  • 返回值
    ftell()返回基于文件开头的偏移字节数。
  • 实例:计算文件大小
#include <stdio.h>
int main() {
    FILE* fp = fopen("hello.txt","r");
    if(fp) {
        fseek(fp,0,SEEK_END);//设置指针为最后位置,便宜0字节
        long size = ftell(fp); //ftell()返回基于文件开头的偏移字节数。
        printf("大小为%ldB\n",size);
    }
}

1.6 文件结尾判断feof()

  • 函数原型
int feof(FILE* stream);
  • 参数
    stream 文件指针
  • 返回值
    若指针指向文件结尾,返回一个真值,否则返回非真值。

1.7 返回开头rewind()

  • 函数原型
void rewind(FILE* stream);
  • 参数
    stream 文件指针
  • 实例
#include <stdio.h>
int main() {
    FILE* fp = fopen("hello.txt","r");
    fseek(fp,0,SEEK_END);
    long len = ftell(fp);
    printf("%d\n",len);
    rewind(fp);
    len = ftell(fp);
    printf("%d\n",len);
}
13
0

1.8 清空数据流

  • 函数原型
void fflush(FILE* stream);
  • 参数
    stream 文件指针
  • 举例
fflush(fp);        // 清空文件流
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一、C语言进阶:文件操作 的相关文章

  • 完整的 C++ i18n gettext()“hello world”示例

    我正在寻找完整的 i18ngettext 你好世界的例子 我已经开始了一个基于的脚本使用 GNU gettext 的本机语言支持教程 https web archive org web 20130330233819 http oriya s
  • 在非实时操作系统/内核上执行接近实时任务的最佳方法是什么?

    在一台 GNU Linux 机器上 如果想要执行 实时 亚毫秒级时间关键 任务 您几乎总是必须经历漫长 复杂且容易出现问题的内核补丁过程 以提供足够的支持 1 http en wikipedia org wiki RTLinux Backg
  • 如何将 elf 解释器(ld-linux.so.2/ld-2.17.so)构建为静态库?

    如果我的问题不准确 我深表歉意 因为我没有太多 Linux 相关经验 我目前正在构建一个 Linux 从头开始 主要遵循 linuxfromscratch org 版本的指南 7 3 我遇到了以下问题 当我构建可执行文件时 获取一个称为 E
  • 用于时间线数据的类似 gnuplot 的程序

    我正在寻找一个类似 gnuplot用于在时间轴中绘制数据图表的程序 类似 gnuplot 在 Linux 上运行 命令行功能 GUI 对我帮助不大 可编写脚本的语法 输出为 jpg png svg 或 gif 输出应该是这样的 set5 s
  • 了解 Linux oom-killer 日志

    我的应用程序被 oom killer 杀死了 它是在实时 USB 上运行的 Ubuntu 11 10 无需交换 PC 具有 1 Gig 的 RAM 唯一运行的应用程序 除了所有内置的 Ubuntu 东西 是我的程序 flasherav 请注
  • Grep 递归和计数

    需要在具有大量子目录的目录中搜索文件内的字符串 我在用着 grep c r string here 我怎样才能找到总数量 如何仅输出至少具有一个实例的文件 使用 Bash 的进程替换 这给出了我认为是您想要的输出 如果不是 请澄清问题 gr
  • 用于获取特定用户 ID 和进程数的 Bash 脚本

    我需要 bash 脚本来计算特定用户或所有用户的进程 我们可以输入 0 1 或更多参数 例如 myScript sh root deamon 应该像这样执行 root 92 deamon 8 2 users has total proces
  • 在用户程序中使用 或在驱动程序模块代码中使用 ...这有关系吗?

    我正在开发一个设备驱动程序模块和关联的用户库来处理ioctl 来电 该库获取相关信息并将其放入一个结构中 该结构被传递到驱动程序模块中并在那里解压 然后进行处理 我省略了很多步骤 但这就是总体思路 一些数据通过结构体传递ioctl is u
  • Apache LOG:子进程 pid xxxx 退出信号分段错误 (11)

    Apache PHP Mysql Linux 注意 子进程 pid 23145 退出信号分段错误 11 tmp 中可能存在 coredump 但 tmp下没有找到任何东西 我怎样才能找到错误 PHP 代码中函数的无限循环导致了此错误
  • 如何通过不同的接口路由 TCP/IP 响应?

    我有两台机器 每台机器都有两个有效的网络接口 一个以太网接口eth0和 tun tap 接口gr0 目标是使用接口在机器 A 上启动 TCP 连接gr0但然后让机器 B 的响应 ACK 等 通过以太网接口返回 eth0 因此 机器 A 发出
  • 如果输入被重定向则执行操作

    我想知道如果我的输入被重定向 我应该如何在 C 程序中执行操作 例如 假设我有已编译的程序 prog 并且我将输入 input txt 重定向到它 我这样做 prog lt input txt 我如何在代码中检测到这一点 一般来说 您无法判
  • Java时区混乱

    我正在运行 Tomcat 应用程序 并且需要显示一些时间值 不幸的是 时间快到了 还有一个小时的休息时间 我调查了一下 发现我的默认时区被设置为 sun util calendar ZoneInfo id GMT 08 00 offset
  • Linux下单个目录下文件过多会怎样?

    如果一个目录中有大约 1 000 000 个单独的文件 大部分大小为 100k 其中没有其他目录和文件 是否会以任何其他可能的方式降低效率或产生缺点 ARG MAX 会对此提出异议 例如 rm rf 在目录中时 会说 参数太多 想要执行某种
  • Linux >2.6.33:可以使用 sendfile() 来实现更快的“猫”吗?

    必须将大量大文件连接成一个更大的单个文件 我们目前使用 cat file1 file2 output file but are wondering whether it could be done faster than with that
  • 我可以在 Ubuntu 上使用 Homebrew 吗?

    我只是尝试使用 Homebrew 和 Linuxbrew 在我的 Ubuntu 服务器上安装软件包 但都失败了 这就是我尝试安装它们的方法 sudo apt get install build essential curl git m4 r
  • 打印 STDOUT/STDERR 并将它们写入 Bash 中的文件?

    有没有办法让 Bash 将 STDOUT STDERR 重定向到文件 但仍然将它们打印到终端 这会将 STDOUT 和 STDERR 重定向到同一个文件 some command 2 gt 1 tee file log Example to
  • 使用 .htaccess 启用 PHP 短标签

    我在自己的 Centos 服务器上设置了 Apache 并具有多个虚拟 Web 服务器 并且我希望仅为位于以下位置的其中一个 Web 服务器启用 PHP 短标记 var www ostickets html 我可以通过添加成功启用短标签sh
  • SIGHUP 用于重新加载配置

    根据signal 7 SIGHUP用于检测控制终端的挂起或控制进程的死亡 然而 我遇到过很多 OSS 守护进程 服务 其中SIGHUP用于启动配置的重新加载 这里有一些例子 hostapd sshd snort etc 这是实现重新加载的标
  • 进程如何知道它已收到信号

    如果我错了 请纠正我 以下是我对信号的理解 据我所知 信号生成 和信号传递有2个不同 事物 为了产生信号 操作系统只是在位数组中设置一个位 在过程控制中维护 工艺块 PCB 每一位 对应于特定信号 当设置一个位时 这意味着 该位对应的信号为
  • 使用 Vala 和 GLib 的正则表达式

    有没有一个函数 比如http php net manual en function preg match all php http php net manual en function preg match all php 使用 GLibh

随机推荐

  • Conda更新报错:requests.exceptions.HTTPError: 404 Client Error: Not Found for url: https://mirrors.tuna.t

    Conda更新报错 requests exceptions HTTPError 404 Client Error Not Found for url https mirrors tuna tsinghua edu cn anaconda p
  • “指定的文件名无效或太长” 无法拷贝,咋办

    话不多说 上图 移动硬盘中的数据 无法拷贝 无法删除 无法移动 无法改名 无法用RAR压缩 怎么办呢 我要拷出来用呢 这是因为 文件名中有冒号 冒号属于特殊字符 windows不认冒号 解决方法 不要在windows底下 拷贝了 找一个LI
  • 如何写出正确CUDA程序(持续更新中)

    本文不谈CUDA优化 只谈如何正确写出CUDA程序 先写对 再说优化 最近写CUDA程序也是断断续续的 经常程序写完了需要很长的时间调试 各种错误 调试的方法也是简单的printf 目前没找到更好的调试方法 如果有更好的办法的化希望告知 昨
  • python flask使用session.delete(result)删除数据库数据报错Class ‘builtins.list‘ is not mapped

    下面代码报错 results session query SchoolModel filter by exam id examId all session delete results session commit Class builti
  • SpringMVC框架(详解)

    目录 一 简介 1 1 什么是MVC 1 2 SpringMVC的优缺点 1 3 MVC模式 二 使用SpringMvc 21 创建maven web项目 修改webapp目录下WEB INF目录下的web xml文件 2 2 web xm
  • Elasticsearch专栏-5.es基本用法-分词查询

    es基本用法 分词查询 什么是分词 如何查看分词结果 分词涉及关键字说明 text和keyword match和term 举例说明 分词查询 match phrase 什么是分词 所谓分词 就是把一段语句 分割成一个个单词的过程 比如 71
  • 睿智的目标检测45——TF2搭建Faster R-CNN目标检测平台

    睿智的目标检测45 TF2搭建Faster R CNN目标检测平台 学习前言 什么是FasterRCNN目标检测算法 源码下载 Faster RCNN实现思路 一 预测部分 1 主干网络介绍 2 获得Proposal建议框 3 Propos
  • OpenSessionInViewFilter的作用及原理

    Hibernate 允许对关联对象 属性进行延迟加载 但是必须保证延迟加载的操作限于同一个 Hibernate Session 范围之内进行 如果 Service 层返回一个启用了延迟加载功能的领域对象给 Web 层 当 Web 层访问到那
  • JDK配置,切换

    目录 基础概念 windows 安装版 解压版 多个JDK切换 基础概念 JDK安装版会向注册表里面写入一些配置信息 添加环境变量信息 而解压版不会 需要自己配置环境变量 指向jdk的安装目录JAVA HOME JDK的安装路径 指定命令搜
  • 在openeuler22.03平台上基于atmoz/sftp容器运行老版本的openssh服务器

    在国产化openeuler22 03平台上容器化openssh默认为8 8p1 为进行安全加固 我们将其升级到了9 3了 但部分应用的sftp客户端版本老旧 无法连接到新版服务器 故本文尝试在国产开源操作系统搭建老版本的openssh服务器
  • 更新服务器列表不显示进度条,Ajax 请求服务器更新进度条

    Ajax Progress Bar var xmlHttp var key var bar color gray 进度条的颜色 var span id block var clear function createXMLHttpReques
  • 【C++】泛型编程

    为了让函数或者类有更好的复用性 C 引入了摸板的技术 让不同的数据类型 能使用到相同的函数或者类中去 这种编程的思想也叫做泛型编程 一 摸板 void Swap int left int right int temp left left r
  • Pandas系列学习(二):数据读取与输出

    平时工作中 主要会涉及到csv excel和sql等数据的导入与导出比较多 pandas库也内置了相应的函数进行处理读取与输出这些文件 首先 看看pd read csv 函数的语法格式如下 1 pd read csv pd read csv
  • ArcGIS:读取nc格式文件并导出为tif格式文件,降雨或温度NC等数据

    使用ArcGIS读取nc文件步骤 1 打开ArcGIS 在多维工具下选择 创建NetCDF栅格图层 2 输入nc文件 其他参数可忽略 点击确定 3 创建好后 右键点击图层 点击属性 选择 NetCDF 然后选择波段纬度 接着点击纬度对应的值
  • [XenServer] 修改默认安装XenServer系统盘(4G)大小

    安装XenServer系统盘默认大小为4G 安装前我们可以调整大小 注 此教程只适用于在全新安装XenServer的时候使用 已经安装过XenServer的无法修改系统盘 4G 大小 注 如果带数据重装 安装的时候一定要保证XenServe
  • day o1

    一java的发展史 1995年Sun公司发布Java1 0版本 1997年发布Java 1 1版本 1998年发布Java 1 2版本 2000年发布Java 1 3版本 2002年发布Java 1 4版本 2004年发布Java 1 5版
  • C2143 C4430 C2238错误

    原因是头文件互相包含了 错误1 error C2143 语法错误 缺少 在 lt 的前面 错误2 error C2238 意外的标记位于 之前 错误3 error C4430 缺少类型说明符 假定为int 注意 C 不支持默认int
  • SylixOS下定时器使用

    1 适用范围 本文档介绍SylixOS下实现定时器功能的方法 使用者应熟悉SylixOS以及SylixOS下的编程规范 2 实现方案 SylixOS提供标准定时器接口 用户可在应用层直接调用 下面列出定时器的创建 启动 停止以及删除等操作
  • VM关闭防火墙操作

    VM关闭防火墙操作 链接外网配置 setup 配置ip等 设置开启网卡 进入ifcfg eth0 vim etc sysconfig network scripts ifcfg eth0 修改 ONBOOT yes 重启网卡 service
  • 一、C语言进阶:文件操作

    1 文件操作 1 1 文件的输入输出 输出 使用printf 和命令行重定向 gt 实现文件输出 输入 使用scanf 和命令行重定向 lt 实现文件输入 include