【发布时间】:2011-11-28 17:37:57
【问题描述】:
我正在运行一个 windows c++ 多线程应用程序,其中服务器类的一个实例/线程正在附加到文件中。其他线程运行仅加载文件的客户端实例 每个客户的启动。 当我到达加载文件结束后的 2k 字节内时,我检查文件是否已更改 大小,所以我知道要更新要读取的总字节数。有时文件大小 我回来被错误地确定为零(0)。为此,我正在使用下面的 stat 调用。当返回零时,作为健全性检查,我然后调用 getFileSizeWithTellg() 来查看它返回的内容并返回预期的非零值。等于或大于初始值的值。 我意识到强制转换为 unsigned int 可能有问题,但文件永远不会 大于 5 mgBytes。
当 ..Tellg 调用没有返回零值时,什么可能导致 stat() 调用返回零值? 感谢您对此的任何见解。
/
/ snippets from methods in different classes
//
// from client class
ifstream fileSeqIn
fileSeqIn.open(fName.c_str(), ios::in | ios::binary |ios::ate);
// to get initial size
size = fileSeqIn.tellg();
fileSeqIn.seekg(0, ios::beg);
// later to determine if the file has grown
struct stat filestatus;
unsigned int size;
if (stat(fName, &filestatus ) == 0) {
size = (unsigned int)filestatus.st_size;
}
//
unsigned int getFileSizeWithTellg(char *fname)
{
// get length of file
is.open (fname, ios::binary );
is.seekg (0, ios::end);
length = is.tellg();
is.close();
return(length);
}
//-----------------------------------------------------------------------------
// from server class
ofstream fileSeqOut;
fileSeqOut.open(fName.c_str(), ios::app | ios::out |ios::ate |ios::binary);
【问题讨论】:
标签: c++ windows visual-c++