linux c文件相关操作

7 篇文章 1 订阅
6 篇文章 0 订阅

1,操作文件,需要文件句柄 ,头文件 #include<stdio.h>

若用fgets函数读取文件内容,需要注意fgets函数的使用。

函数声明:char *fgets(char *str, int n, FILE *stream)

参数:
str -- 这是指向一个字符数组的指针,该数组存储了要读取的字符串。
n -- 这是要读取的最大字符数(包括最后的空字符)。通常是使用以 str 传递的数组长度。
stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了要从中读取字符的流。

返回值:
1,如果成功,该函数返回第一个参数 str;
2,如果到达文件末尾或者没有读取到任何字符,str 的内容保持不变,并返回一个空指针NULL;
3,如果发生读入错误,error指示器被设置,返回一个空指针NULL,str的值可能被改变。

注意设置读取值n与要读取内容的关系。
假设用fgets读取一个文件,该文件每一行长度都为length,结尾都有换行符
<1>若设置 n < length
    则读取到的内容为n-1个长度,在加上一个'\0';再次读取时,会从该行的n处开始读取
<2>若设置 n >= length+2
    则会读取这一行完整的内容,包括末尾的'\n'和'\0'。

举个栗子:

创建文件file.txt,内容为:

1234567890
abcdefghij

读取文件 

#include<stdio.h>
#include<string.h>

int main(int argc, char *argv[])
{
    char szFile[32] = "./file.txt";
    char szInfo[15];
    int i = 0;

    FILE *fp;
    fp = fopen(szFile, "r");
    if(!fp)
        return -1;

    int length = 5;
    while(fgets(szInfo, length, fp) != NULL)
    {
        printf("szInfo:%s\n", szInfo);
        for(i=0;i<length;i++)
        {
            printf("%02x ", szInfo[i]);
        }
        printf("\n++++++++++++++++++++\n");
    }
    return 0;
}

输出结果:

szInfo:1234
31 32 33 34 00 
szInfo:5678
35 36 37 38 00 
szInfo:90

39 30 0a 00 00 
szInfo:abcd
61 62 63 64 00 
szInfo:efgh
65 66 67 68 00 
szInfo:ij

69 6a 0a 00 00 
szInfo:

0a 00 0a 00 00 

若将读取长度改为15,则输出结果为:

 程序修改:

 ...

 int length = 15;

 ...


输出结果:
szInfo:1234567890

31 32 33 34 35 36 37 38 39 30 0a 00 00 00 00 
++++++++++++++++++++
szInfo:abcdefghij

61 62 63 64 65 66 67 68 69 6a 0a 00 00 00 00 
++++++++++++++++++++
szInfo:

0a 00 63 64 65 66 67 68 69 6a 0a 00 00 00 00 
++++++++++++++++++++

 

2,文件夹相关操作,头文件 #include<dirent.h>

结构体dirent内容:

struct dirent
{
    long d_ino;                 /* inode number 索引节点号 */
    off_t d_off;                /* offset to this dirent 在目录文件中的偏移 */
    unsigned short d_reclen;    /* length of this d_name 文件名长 */
    unsigned char d_type;       /* the type of d_name 文件类型 */
    char d_name [NAME_MAX+1];   /* file name (null-terminated) 文件名,最长256字符 */
}

3,删除文件及文件夹函数:

#include<stdio.h>  有 remove函数, int remove(const char *filename) 

该函数可以传入文件或文件夹,但只能删除空文件夹,否则不成功。

有文章说,remove其实是根据传入参数调用不同的函数,

若传入文件,调用unlink函数

若传入文件夹,调用rmdir函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值