gpt4 book ai didi

c++ - 适用于 iOS 和 Android 的 C++ 文件操作

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:17:00 25 4
gpt4 key购买 nike

我需要在 C++ 中执行某个文件操作,如下所示:

  1. 查找并删除给定目录中的所有文件。
  2. 查找给定文件是否存在,如果存在,则删除它等。

请告诉我适用于 android 和 iOS 平台的 C++ 解决方案/库。

最佳答案

C++ 为您提供了文件交互的规定。

我将向您展示我的 FileReader 类,它使用 C++ 进行一些 C 风格的文件处理。

// BEGIN HEADER
#include <stdio.h>
#include <exception>
#include <stdexcept>

#define DISALLOW_COPY(type) \
type(const type&); \
void operator=(const type&)

class FileReader { // RAII applies to file contents
FILE *file; // c-style open/close
DISALLOW_COPY(FileReader);
protected:
unsigned char *data; // local copy
long size;
public:
FileReader(const char *filename);
~FileReader();
unsigned long getSize();
unsigned char *getFileData();
};
// END HEADER

FileReader::FileReader(const char *filename) {

file = NULL; data = NULL;
if (!(file = fopen(filename, "rb"))) { throw std::runtime_error(std::string("File could not be opened: ")+filename); }
fseek(file,0,SEEK_END);
size = ftell(file);
rewind(file);
data = new unsigned char [size];
VERIFY(size == (long)fread(data, 1, size, file)); // debug macro (just ignore it)
fclose(file);
#ifdef DEBUG
PRINT("FileReader opening file "); printf("%s, %ld bytes.\n",filename,size);
#endif
}
FileReader::~FileReader() {
delete[] data;
}
unsigned char *FileReader::getFileData() { return data; }
unsigned long FileReader::getSize() { return size; }

我会注意到,如果可以的话,您可能希望避免使用 C++ 列出目录中的文件。为什么不能简单地假设某些文件是否存在?我做过一些游戏编程,几乎唯一需要担心文件系统的时间是用于记录目的或加载 Assets 。对于这两者,您几乎可以假设它们的路径是什么。

此外,您可能需要查看 remove function用于删除文件。我无法用 C++ 编写任何原始代码来执行 ls 的任务。我不会使用 C++ 来完成这样的任务(提示:ls 是一个非常简洁的程序)。

另请查看 statopendir(感谢 Ben),它们应该在您的平台上可用。另一点是,诸如在目录中列出文件之类的任务通常是您希望操作系统内核为您做的事情。

另一个回答者提到的更高级的方法是 Boost Filesystem,这是一个不错的选择,因为 Boost 通常是这样的:看看 this directory iteration example .

从游戏编程的角度来看,我倾向于依赖像 Lua 的 os() 这样的东西。例如,如果您有一个 Python 程序,假设您有一个可用的 ls 程序,您可以执行类似 os.system("ls") 的操作来获取您的目录内容。

您还可以从 C++ 程序中exec ls 程序。

关于c++ - 适用于 iOS 和 Android 的 C++ 文件操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14086674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com