loadrunder脚本篇——文件读写操作

Posted 残~枫~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了loadrunder脚本篇——文件读写操作相关的知识,希望对你有一定的参考价值。

 函数说明

函数原型:

size_t fwrite( const void *buffer, size_t size, size_t count, FILE *file_pointer );

参数说明:

buffer:包含数据的缓冲区

size:缓冲区buffer的大小(字节为单位)

count:缓冲区中写入多少个size大小数据(The number of bytes to store in the buffer)

file_pointer:指向存放数据文件的文件指针

 

 

size_t: 际写入的数据块数目(每个数据块大小为size)

 

函数原型:

size_t fread( void *buffer, size_t size, size_t count, FILE *file_pointer );

参数说明:

同fwrite

 

函数原型:

int ferror( FILE *file_pointer );

功能:检查文件i/o错误

参数说明:

file_pointer:指向文件的文件指针

 

函数原型

int feof( FILE *file_pointer );

功能:检测流上的文件结束符

参数说明:

file_pointer:指向文件的文件指针

 

以下通过例子说明如何进行数据存取操作

例子1

从d盘的readme.txt中读取文件内容并显示读取字节数

代码:

Action()

{

  

int count = 0;

char *buffer=NULL;
int filelenth=0;

long file_stream;

char * filename = "F:\\\\test.txt";

 

if ((file_stream = fopen(filename, "r")) == NULL )

{

lr_error_message ("Cannot open %s", filename);

return -1;

}

 

// Read until end of file

while (!feof(file_stream))

{
fseek(file_stream,0,2);
filelenth=ftell(file_stream);
fseek(file_stream,0,0);

buffer=(char *)malloc(filelenth);

// Read 1000 bytes while maintaining a running count

count = fread(buffer, sizeof(char), filelenth, file_stream);

lr_output_message ("%d bytes read", count);
lr_output_message("conten is %s",buffer);

 

if (ferror(file_stream)) {

lr_output_message ("Error reading file %s", filename);

}

break;

}


// Close the file stream

if (fclose(file_stream))

{

lr_error_message ("Error closing file %s", filename);

}

    return 0;

}

结果:

脚本开发-文件读写操作" title="loadrunner 脚本开发-文件读写操作" border="0">

 

例子2

将每个学生的数据(学号和成绩)保存到某个文件,然后从该文件读取存放的学生数据记录并展示

 

代码:

Action()

{

    // 定义保存学生数据的文件名

    #ifdef unix

        char * filename = "/tmp/marks.txt";

    #else

        char * filename = "d:\\\\marks.txt";

    #endif

 

 

    // 保存学生数据(学号和成绩)

    struct student_data

    {

        int student_id;

        unsigned char marks[10];

    };

 

    struct student_data sd1;  // 定义结构体,用于定义学生数据

    struct student_data sd2;  // 用于存放从文件中读取的学生数据

 

    long file_handle = NULL;   // 文件句柄

 

    int i = 0;  

    int count = 0; // 统计每次读取学生记录个数

    int total = 0; // 用于统计总的学生记录个数

 

    // 打开、创建数据文件

    if ((file_handle = fopen(filename, "w+")) == NULL)

    {

        lr_output_message ("Unable to create %s", filename);

        return -1;

    }

 

 

    // 设置学号

    sd1.student_id = 1001;

    // 设置成绩(假设10门课程)

    for (i = 0; i < 10; i++)

    {

        sd1.marks[i] = (unsigned char)(85 + i);

    }

 

 

    // 把学生记录写入数据文件

    i = fwrite(&sd1, sizeof(struct student_data), 1, file_handle);

 

    if (i > 0)  // fwrite调用不成功则返回0

    {

        lr_output_message ("Successfully wrote %d record", i);

    }

 

 

    fclose(file_handle); // 关闭文件

 

    if ((file_handle = fopen(filename, "r")) == NULL )  // 如果打开文件失败

    {

        lr_error_message ("Cannot open %s", filename);

        return -1;

    }

 

 

    // 读取全部文件内容

    while (!feof(file_handle))

    {

        count = fread(&sd2, sizeof(struct student_data), 1, file_handle);

        lr_output_message ("%d 个学生数据记录", count);

 

        // 检查文件I/O错误

        if (ferror(file_handle))

        {

            lr_output_message ("Error reading file %s", filename);

            break;

        }

 

        total += count; // 计算实际读取的总字节数

 

    }

 

 

    // 展示最后的数据

    lr_output_message("学生的学号为:%d,成绩如下:", sd2.student_id);

    for(i=0; i<10; i++)

    {

       lr_output_message("%u", sd2.marks[i]);

    }

 

    lr_output_message ("Total number of student record = %d", total);

 

 

    // 关键文件流

    if (fclose(file_handle))

    {

       lr_error_message ("Error closing file %s", filename);

    }

 

    return 0;

}

运行结果:

 

以上是关于loadrunder脚本篇——文件读写操作的主要内容,如果未能解决你的问题,请参考以下文章

flutter 如何实现文件读写(使用篇)

使用shell脚本简单模拟对特定文件同时读写操作

Linux中的文件读写操作详解及示例代码 | 嵌入式Linux应用开发篇 - 01

shell脚本连接读写操作mysql数据库实例

利用 Java io 包进行文件读写操作

Loadrunder脚本篇——关联数组(参数数组)