在PC中制作文件,但记录破损 [英] Making file in PC, but broken records

查看:94
本文介绍了在PC中制作文件,但记录破损的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



我想用VC ++在pc中创建一个流文件。



记录的布局如下:

Hi,
I want to make a stream file in pc with VC++.

The layout of records are as follows:

struct Log_record {

char sequence[8];

int   index;

int   cord;

char  crlf[2];

}

Log_record my_rec;

char LogBuffer[sizeof(my_rec)*1000];

for (int i = 0;i<1000;i++)

{

  CString s = _T("");

  s.Format(_T("%07d"), i+1);

  Widechartomultibyte(s,...., my_rec.sequence, 8, NULL,NULL);

 my_rec.index = 0;;

 my_rec.cord = 0;

 my_rec.crlf = 0x0d0a;

 memcpy(&LogBuffer[i*sizeof(my_rec), &my_rec, sizeof(my_rec));

}





因此,在填写带有1000条记录的LogBuffer后,将fwrite选项作为ab一次。

所以我希望文件结构如下



So, after filling a LogBuffer with 1000 records, and fwrite with option as "ab" one time.
So I expect a file with structure like as following

0000001 ..... CRLF 

0000002 ..... CRLF

.....

....

0001000 ...... CRLF









但是,有时,

它创建一个空格序列或没有CRLF的文件。

它看起来像破纪录...



这是什么原因造成的问题?



1.简单的编码错误?

2.或其他任何PC原因?



请帮帮我。



提前谢谢



我尝试了什么:



这个问题浪费了1周。





But, sometimes,
It make a file with space sequence or without CRLF.
It looks like broken records...

What is the cause of ths problem?

1. Simple coding mistake?
2. Or any other cause of PC?

Please help me.

Thank you in advance

What I have tried:

More 1 week wasted for this problem.

推荐答案

尝试这样的事情:

Try something like this:
#pragma pack(push)
#pragma pack(1)
struct LogRecord
{
    char sequence[8];
    int   index;
    int   cord;
    char  crlf[2];

    LogRecord()
        : sequence{ }, index{ }, cord{ }, crlf{'\r','\n' }
    { }

};
#pragma pack(pop)


int main()
{
    auto handle = fopen( "F:\\src\\SimpleLogger\\log.dat", "ab" );

    LogRecord records[1000];

    for ( int i = 0; i < 1000; i++ )
    {
        sprintf( records[i].sequence, "%07d", i );
    }


    fwrite( records, 1, sizeof( records ), handle );

    fclose( handle );


    return 0;
}



祝你好运

Espen Harlinn


Best regards
Espen Harlinn


这篇关于在PC中制作文件,但记录破损的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆