DOS下写文本文件出错?

wangbm 2006-07-02 11:45:51
我的程序在10分钟左右,写文本文件2000多次,然后提示:
“sector not found writing drive c
Abort,Retry,Ignore,Fail?”
写文件语句:
ofstream file();
if (file)
{file<<txt;
file.close;}
程序是用BC4。5写的,接受串口数据,然后写入文本文件,记录长度约:30个字节,
然后我把记录改为13个字节还是在两千多次出现这个问题;
出现次问题后,文本文件在WIN系统下也打不开了,提示文件损坏了。
请问:
1.文本文件在DOS下有只能写两千多次吗?
2.此问题是否是硬件问题,或者是操作系统问题,还是程序问题。
3.如果是程序问题,有什么好的解决方法?
...全文
157 3 打赏 收藏 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangbm 2006-07-03
  • 打赏
  • 举报
回复
我用的是嵌入式PC上的DOS系统,嵌入式PC是其他公司做的,写的是CF卡(C盘),应该不是硬盘问题因为换另一个卡也不行。,会不会有内存泄漏引起我把原码贴出来:
int main()
{

char Date[50], Time[50],BarCode1[50], KeyBarCode[50];
char CheckDate[50], CheckTime[50], msg[100];
int n = 0,ScanNum = 0;
unsigned char Cmd = InCheckCmd;
char temp[10];

/* Communications parameters */
//unsigned long speed = 115200L; /*波特率参数*/
unsigned long speed = 9600L; /*波特率参数*/
int parity = NO_PARITY; /*奇偶效验*/
int bits = 8; /*数据位数*/
int stopbits = 1; /*停止位数*/

int done = FALSE;
char c;
char strVar[50];
rt_init(100);
//memset(buf1,0x00,5000);
//0628rem
sock_init(); //初始化协议栈

//得到服务器信息
memset(ClientIP, 0x00, 100);
memset(NetMask, 0x00, 100);
memset(GateWay, 0x00, 100);
memset(Port, 0x00, 10);
memset(g_ServerIP, 0x00, 100);
memset(ID, 0x00, 50);

CSetting::GetSetting(ClientIP, NetMask, GateWay, g_ServerIP, Port,
RecvTimeOut, ID);

g_Port = atoi(Port);

socket.Set(g_ServerIP, g_Port, 0);


//serial
portbase = 0x3f8;

SerInit(portbase, speed, parity, bits, stopbits);
/*
The main loop acts as a dumb terminal. We repeatedly
check the keyboard buffer, and communications buffer.
*/
do {
/*
//发送数据信息
if(socket.IsConnect == 0)
{

if(socket.Connect() == 1)
{
if(socket.IsSend == 1)
{
socket.SendData_ToServer();
}

}
else
{
goto lbl;
}
}
else
{
if(socket.IsSend == 1)
{
socket.SendData_ToServer();
}
}
*/
CDos::ShowTime("Time ", Date, Time);

memset(msg, 0x00, 100);
sprintf(msg, "ScanNum: %d", ScanNum);

CDos::SetScreenPos(1,4);
cout<<msg;

//接受COM1数据
if(SerRev(&c)!= -1)
{

memset(temp, 0x00, 10);
sprintf(temp, "%c", c);
strcat(BarCode1, temp);

if(c == '\r' || c == '\n')
{
////char strVar[50];
memset(strVar, 0x00, 50);

CDos::TrimEnterWord(BarCode1, strVar);

if(strlen(strVar) > 0)
{


CDos::ClearScreen_ToRow(1,3);
CDos::SetScreenPos(1,3);
cout<<"BarCode: ";

//数据读取完毕
CDos::SetScreenPos(10, 3);
cout<<strVar;


memset(CheckDate, 0x00, 50);
memset(CheckTime, 0x00, 50);
memset(msg, 0x00, 100);
CDos::GetDateTime(CheckDate, CheckTime);

sprintf(msg, "%s|%s|%s %s", strVar, ID, CheckDate,
CheckTime);


CFile File;
File.WriteFile(Cmd, msg);
//File.WriteFile(Cmd, strVar);

++ScanNum;
}
////++ScanNum;
//ser1.ClearComm();
memset(BarCode1, 0x00, 50);
}
}
} while (!done && !SError);
comm_off();
return 0;
}

//写文件writeFile:
void CFile::WriteFile(char Cmd, char *pContent)
{
ofstream file(DataFile, ios::out|ios::app);

if(file)
{
file<<Cmd<<pContent<<"\r\n";
file.close();

//把信息数量写入数量文件
//得到数量
char num[100];
memset(num, 0x00, 100);

GetRecord_ToRow(NumFile, num);
int n = atoi(num);

++n;

if(n > 9999)
{
//删除所有文件
DelFile(DataFile);
DelFile(NumFile);
DelFile(SignFile);
}
else
{
memset(num, 0x00, 100);
sprintf(num, "%d", n);
WriteRecord_ToRow(NumFile, num);
}
}
}

void CFile::GetRecord_ToRow(const char *pFileName, char *pMessage)
{
ifstream file(pFileName, ios::in|ios::nocreate);

if(!file)
{
return;
}
else
{
file.getline(pMessage, 100);
file.close();
}
}


////////////////////////////////////////////////////////////////////////////////
//
//函数名:
// WriteRecord_ToRow(const char *pFileName, char *pContent)
//
//参数:
// const char *pFileName : 文件名
// char *pContent : 信息内容
//
//返回值:
// 无
//
//功能:
// 写入文件的一行
//
////////////////////////////////////////////////////////////////////////////////
void CFile::WriteRecord_ToRow(const char *pFileName, char *pContent)
{
ofstream file(pFileName, ios::out);

if(file)
{
file<<pContent<<"\r\n";
file.close();
}
}


syy64 2006-07-02
  • 打赏
  • 举报
回复
估计是硬盘有坏的扇区。
hijack 2006-07-02
  • 打赏
  • 举报
回复
记录中有没有'\0'结束符?txt是不是一个字符串?

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧