Articles of fstream

如何检查一个文件是否存在,并在C ++中可读?

我有一个fstream my_file(“test.txt”),但我不知道test.txt是否存在。 如果存在的话,我想知道我是否也可以阅读。 怎么做? 我使用Linux。

fstream :: open()在Windows上,Unicode或Non-Ascii字符不起作用(使用std :: ios :: out)

在C ++项目中,我想打开一个文件( fstream::open() )(这似乎是一个主要的问题)。 我的程序的Windows版本失败了。 文件“ä”(UTF-8 0xC3 0xA4) std::string s = …; //Convert s std::fstream f; f.open(s.c_str(), std::ios::binary | std::ios::in); //Works (f.is_open() == true) f.close(); f.open(s.c_str(), std::ios::binary | std::ios::in | std::ios::out); //Doesn't work strings是UTF-8编码,但是然后从UTF-8转换为Latin1(0xE4)。 我正在使用Qt,所以QString::fromUtf8(s.c_str()).toLocal8Bit().constData() 。 为什么我可以打开文件阅读,但不能写? 文件“и”(UTF-8 0xD0 0xB8) 相同的代码,根本不起作用。 看来,这个字符不适合Windows-1252字符集。 我如何打开这样的Fstream(我没有使用MSVC,所以没有fstream::open(const wchar_t*, ios_base::openmode) )?

在Unix下创build的文件的Windows下使用fstream :: seekg

我有一个C ++跨平台的程序(用Linux下的g ++和PC下的Visual Studio编译)。 该程序将行写入文本文件(使用<< operator和std::endl ),但也可以从生成的文本文件(使用std::getline )读回数据。 为了优化数据访问和节省内存,在读取数据文件时,我第一次读取数据并在程序中保存数据位置。 当需要数据时,我稍后使用seekg移动到特定位置并读取数据。 在PC上创build和读取文件工作正常。 在Linux上创build和读取文件工作正常。 但是在Linux上创build文件并在PC上阅读失败。 在PC下,seekg有时无法相应地移动光标。 我可以在下面的例子中找出问题。 它读取文件一次,保存第二个位置和值,然后移回保存的位置并再次读取该行。 #include <fstream> #include <iostream> #include <string> #include <assert.h> int main() { std::fstream file; file.open( "buglines.txt", std::ios_base::in ); if ( file.is_open() ) { std::streampos posLine2; std::string lineStr; std::string line2Str; int line = 1; while ( std::getline( file, lineStr ) ) […]

为什么不在Windows上创build/写入文件与fstream工作启动?

所以在这里我得到了这个每个人都明白的小程序。 include <iostream> include <fstream> using namespace std; int main () { ofstream myfile; myfile.open ("example.txt"); myfile << "Writing this to a file.\n"; myfile.close(); return 0; } 这个程序工作得很好,但是,问题是,如果我已经将它添加到Windows上运行启动(在registrySOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run ),程序启动正常,但它不创buildexample.txt文件。 为什么是这样的,我该如何避免呢?