相关疑难解决方法(0)

如何在C++中获取文件大小?

让我们为这个问题创建一个补充问题.在C++中获取文件大小的最常用方法是什么?在回答之前,确保它是可移植的(可以在Unix,Mac和Windows上执行),可靠,易于理解且没有库依赖(没有boost或qt,但是例如glib是可以的,因为它是可移植的库).

c++ filesize

123
推荐指数
5
解决办法
24万
查看次数

哪里可以找到off_t类型的完整定义?

我正在使用TCP将文件从客户端发送到服务器.为了标记文件的结尾,我想在实际数据之前发送文件大小.所以我使用stat系统调用来查找文件的大小.这是类型off_t.我想知道它占用了多少字节,以便我可以在服务器端正确读取它.它定义于 <sys/types.h>.但我不明白这个定义.它只是定义__off_t or _off64_toff_t.在哪里寻找__off_t?它__也是为头文件中的大部分内容添加前缀的约定,当我读取头文件以更好地理解时会让我感到害怕.如何更好地阅读头文件?

#ifndef __off_t_defined
# ifndef __USE_FILE_OFFSET64
typedef __off_t off_t;
# else
typedef __off64_t off_t;
# endif
# define __off_t_defined
#endif 
Run Code Online (Sandbox Code Playgroud)

c sockets networking types header-files

63
推荐指数
4
解决办法
11万
查看次数

tellg()函数给出错误的文件大小?

我做了一个示例项目,将文件读入缓冲区.当我使用tellg()函数时,它给我一个比读取函数实际读取的值更大的值.我认为有一个错误.

这是我的代码:

编辑:

void read_file (const char* name, int *size , char*& buffer)
{
  ifstream file;

  file.open(name,ios::in|ios::binary);
  *size = 0;
  if (file.is_open())
  {
    // get length of file
    file.seekg(0,std::ios_base::end);
    int length = *size = file.tellg();
    file.seekg(0,std::ios_base::beg);

    // allocate buffer in size of file
    buffer = new char[length];

    // read
    file.read(buffer,length);
    cout << file.gcount() << endl;
   }
   file.close();
}
Run Code Online (Sandbox Code Playgroud)

主要:

void main()
{
  int size = 0;
  char* buffer = NULL;
  read_file("File.txt",&size,buffer);

  for (int i = 0; i < size; i++) …
Run Code Online (Sandbox Code Playgroud)

c++ file ifstream

23
推荐指数
2
解决办法
3万
查看次数

如何确定std :: ofstream打开的文件的当前大小?

我有一个类型的文件流ofstream.构造函数以追加模式打开文件,所有消息总是写在文件末尾.

我需要写入一些固定大小的输出文件,例如1Mb,然后我需要关闭,重命名和压缩它,然后打开一个同名的新文件.

这需要在达到特定大小的文件时完成.

我尝试使用tellg()但是在网上阅读了东西(和这个)后,我明白这不是正确的方法.

由于我是C++的新手,我正在尝试找出最优化和正确的方法来获得准确的文件当前大小ofstream

class Logger {
    std::ofstream outputFile;
    int curr_size;
    Logger (const std::string logfile) : outputFile(FILENAME,
                                                     std::ios::app)
    {
        curr_size = 0;
    }
};
Run Code Online (Sandbox Code Playgroud)

在程序的某个地方,我正在写入数据:

    // ??? Determine the size of current file ???

    if (curr_size >= MAX_FILE_SIZE) {
        outputFile.close();
        //Code to rename and compress file
        // ...
        outputFile.open(FILENAME, std::ios::app);
        curr_size = 0;
    }

    outputFile << message << std::endl;
    outputFile.flush();
Run Code Online (Sandbox Code Playgroud)

c++ fstream ofstream

5
推荐指数
1
解决办法
836
查看次数

Fstream的tellg/seekg返回的价值高于预期

为什么这会失败,它应该是简单而有效的?

fisier.seekg(0, ios::end);
long lungime = fisier.tellg();
Run Code Online (Sandbox Code Playgroud)

这将返回一个比文件更大的值,从而导致错误

char *continut = new char[lungime];
Run Code Online (Sandbox Code Playgroud)

知道问题可能是什么?

我也尝试一次计数到文件的末尾一个char,它产生相同的结果,比预期的数字更高.但是一旦使用getline()一次读取一行,它就可以工作,没有多余的空格......

c++

3
推荐指数
1
解决办法
3206
查看次数

标签 统计

c++ ×4

c ×1

file ×1

filesize ×1

fstream ×1

header-files ×1

ifstream ×1

networking ×1

ofstream ×1

sockets ×1

types ×1