gpt4 book ai didi

c++ - 如何使用 fstream 指针对文件进行操作?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:22:39 25 4
gpt4 key购买 nike

我想使用一些抽象对流进行操作,因此我想使用 fstream* 而不是 ifstream 和 ofstream。我试图那样做,但会导致访问冲突:

char* text= "test"; 
fstream* o = new fstream();
o = &fstream("name.txt");
o->write(text, 4);
o->close();

我该如何修复它,或者使用其他想法?

我想在这种情况下使用指针(您可以在此处查看更多一般信息)How to implement my own IO file API in C++

修改后是这样的:

class GIO_Persistent_File_System : public GIO_CORE
{
public:
GIO_Persistent_File_System(void);
int open(char*, int);
int close();
void write(char* s, int size);
void read(char* s, int size);
public:
~GIO_Persistent_File_System(void);

private:
fstream file;
};

int GIO_Persistent_File_System::open(char* path, int mode){
file.open(path);
return 0;
}

int GIO_Persistent_File_System::close(){
file.close();
return 0;
}

void GIO_Persistent_File_System::write(char* s, int size){
file.write(s, size);
return;
}

void GIO_Persistent_File_System::read(char* s, int size){
file.read(s, size);
return;
}

主要内容:

GIO_CORE* plik = new GIO_Persistent_File_System();
char* test = new char[10];
char* napis = "testgs";
plik->open("name.txt", OPEN_MODE);
plik->write(napis, 2);
//plik->read(test,2);
plik->close();

虽然我找不到文件,但这段代码似乎可以正常工作。我检查并正确指向当前目录 (ProjectName/Debug)

我检查了一下,将 fstream 更改为 ofstream 会起作用,我可以找到该文件。但由于我想实现某种程度的抽象并且我想使用 fstream。我该如何解决?

最佳答案

这段代码会给你一个错误,因为你不能获取临时对象的地址,就像你在 &fstream("name.txt") 中所做的那样。

error: taking address of temporary

另请注意,从字符串文字到 char* 的转换已被弃用,并且在 C++11 中无效。使用 const char* 代替:

const char* text = "test";

尽管如此,让我们看看您正在尝试做什么。首先,您正在动态分配一个 fstream 并初始化指向该对象的指针:

fstream* o = new fstream();

然后在下一行中,您使用 fstream("name.txt") 创建了一个临时对象,然后获取其地址并将其分配给 o(这给出了一个错误,正如我们所见)。现在您将失去对动态分配的 fstream 的任何访问权限,而是让 o 指向一个现已销毁的临时对象。

取消引用该指针(使用 o->)会给您未定义的行为。

你把这个复杂化了。您根本不需要动态分配您的 fstream 对象或使用指针。相反,请尝试:

fstream o("name.txt");
o.write(text, 4);
o.close();

使用更新后的代码,问题是您正在写入 0 个字节:

plik->write(napis, 0);

也许你的意思是:

plik->write(napis, 6);

关于c++ - 如何使用 fstream 指针对文件进行操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15684052/

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