ifstream和oftream问题

帕维尔·奥加涅斯扬

只是这个:

int size = getFileSize(path); //Listed below
ifstream fs(path, ios::in);
ofstream os(path2, ios::out);

//Check - both streams are valid
char buff[CHUNK_SIZE]; //512

while (size > CHUNK_SIZE)
{   
    fs >> buff;
    os << buff;
    size -= CHUNK_SIZE;
}
char* dataLast = new char[size];
fs>>dataLast;
os<<dataLast;
fs.close();
os.close();

//基于SO,效果很好

int getFileSize(string path)
{
FILE *pFile = NULL;

if (fopen_s( &pFile, path.c_str(), "rb" ))
{
    return 0;
}

fseek( pFile, 0, SEEK_END );
int Size = ftell( pFile );
fclose( pFile );
return Size;
}

path2上的文件已损坏,并且小于1 Kb。(初始文件为30Kb);我不需要有关如何复制文件的建议,我很想知道此示例有什么问题。

迪特玛·库尔(DietmarKühl)

首先是一个重要的警告:切勿(如过去一样)在char* 设置width()!的情况下使用格式化输入运算符您将自己打开到缓冲区溢出。基本上,这是C ++的编写版本,gets()它的性能足以将其从C标准中删除(而不仅仅是弃用)!如果您坚持使用带格式的输入char*(通常最好使用std::string),请设置宽度,例如:

char buffer[512];
in >> std::setw(sizeof(buffer) >> buffer;

好的,顺便说一句:看来您实际上是想更改两件重要的事情:

  1. 您可能不想使用格式化输入,即operator>>():格式化输入运算符从跳过空格开始。当读入char*它时,到达空白时也会停止(或者当width()读了很多字符并且仍然有空间存储终止零时,当其为非零值时;请注意,在每次读取之后,该集width()将重置为0)。那就是您可能想使用无格式的输入,例如,in.read(buffer, sizeof(buffer))它设置in.gcount()为实际读取的字符数,例如,在流的末尾,该字符数可能小于size参数。
  2. 您可能应该在std::ios_base::binary模式下打开文件尽管在某些系统(例如POSIX系统)上没有关系,但是在某些以文本模式阅读的系统上,它会将例如\r\nWindows上的行结束序列合并到行末字符中\n同样,\n在文本模式下编写a时,在某些系统上它将被换行符替换,即,您可能还希望在文本模式下打开输出流。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Ifstream和Ofstream问题

来自分类Dev

使用in和out的ifstream和ofstream或fstream

来自分类Dev

将文件放在ifstream和fstream的位置

来自分类Dev

在ifstream上的getlines [会耗尽文件]之后的seekg问题

来自分类Dev

从ifstream正确获取值时出现问题

来自分类Dev

从 Windows 任务栏执行时的 ifstream 问题

来自分类Dev

pyinstaller的问题和问题

来自分类Dev

使用ifstream :: seekg和tellg获取文件大小

来自分类Dev

什么是std :: filebuf等效于ifstream :: eof :: fail和:: tellg

来自分类Dev

ifstream :: binary和ios :: binary之间有区别吗?

来自分类Dev

在Visual Studio 19中无法识别ofstream和ifstream的错误

来自分类Dev

mmap(c),fopen(c)和ifstream(c ++)的差异结果

来自分类Dev

std :: ifstream :: in和std :: ios :: in有什么区别?(显然是C ++中std :: ifstream的openmode标志)

来自分类Dev

我的代码将不会使用ifstream和ofstream从文件读取和显示数据

来自分类Dev

Boost和Rcpp的问题

来自分类Dev

Magento和Paypal问题

来自分类Dev

Twitter和Meteor的问题

来自分类Dev

[] []和if陈述式的问题

来自分类Dev

&&和|| 在while循环问题

来自分类Dev

PHP和MySQL问题

来自分类Dev

SwipeRefreshLayout和TabLayout问题

来自分类Dev

GSON和InstanceCreator问题

来自分类Dev

输入和类型问题

来自分类Dev

findall和xpath问题

来自分类Dev

节点和npm问题

来自分类Dev

Nginx和CSS问题

来自分类Dev

Waitpid和同步问题

来自分类Dev

索引和匹配问题

来自分类Dev

Browserify和ReactJS问题