Я запускаю многопоточное приложение для Windows c ++, в котором один экземпляр / поток класса сервера добавляет к файлу.Другие потоки запускают клиентские экземпляры, которые загружают файл только при запуске каждого клиента.Когда я добираюсь до 2k байтов от конца загрузки файла, я проверяю, изменился ли размер файла, поэтому я знаю, чтобы обновить, сколько всего байтов нужно прочитать.Время от времени размер файла, который я получаю, ошибочно определяется как ноль (0).Я использую статистический вызов ниже для этого.Когда возвращается ноль, то в качестве проверки работоспособности я затем вызываю getFileSizeWithTellg (), чтобы увидеть, что он возвращает, и возвращает ожидаемое ненулевое значение.Значение, которое равно или больше, чем начальное значение.Я понимаю, что приведение к unsigned int может быть проблематичным, но файлы никогда не превышают 5 mgBytes.
Что может быть причиной того, что вызов stat () возвращает нулевое значение, когда вызов ..Tellg не«т?Спасибо за понимание этого.
/
/ 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);