【发布时间】:2015-05-30 02:24:55
【问题描述】:
我搜索了一个 TON 以找到一种方法,使用 fstream 或其他方法将数据写入一个大文件,但没有找到任何答案。
我的问题是,我正在从 Internet 下载数据,然后将数据写入预分配的文件。小于 2GB 的文件似乎一切正常,但是在尝试使用大于 2GB 的预分配文件时,将流指针移动到预分配文件中的特定位置(例如文件的最后位置)时会出错写数据,好像不行,tellp allway return -1。
这是我的写入数据方法,因为写入预分配文件,我没有使用 FILE 或 boost:iosstream。我正在使用带有 .Net 3.5 的 Visual Studio 2008。感谢阅读和帮助我^.^
size_t writeData(void *ptr, size_t size, size_t nmemb, Downloader *objDownloader){
size_t written;
if (objDownloader->_stop == false && objDownloader->mystream.is_open()){
objDownloader->mystream.seekp(objDownloader->_posSeek, ios::beg);
written=size * nmemb;
objDownloader->mystream.write(static_cast<char*>(ptr), written);
objDownloader->_posSeek += size*nmemb;
objDownloader->_downloaded += size*nmemb;
objDownloader->mystream.seekp(objDownloader->_currentPosition, ios::beg);
objDownloader->mystream.write((char*)&objDownloader->_downloaded, sizeof(long long));
long long pos = objDownloader->mystream.tellp();
cout << "POS TEL: " << pos << endl;
return size * nmemb;
}
else{
if (objDownloader->mystream.is_open())
objDownloader->mystream.close();
return -1;
}
}
【问题讨论】:
-
你是用 32 位还是 64 位构建的?