Articles of fopen

如何select开放模式与fopen()?

我有一个关于文件打开模式与fopen() 。 在我的情况下,我想自由地寻找光标,有时甚至可能超越EOF 。 更重要的是,我也想追加到它而不是截断现有的文件。 我试图以a+模式打开文件; 但是,我不能自由地寻找文件光标。 每次我寻找超出EOF的光标时,新的到达数据将追加到文件的末尾,而不是我指定的位置。 而如果以w+模式打开,现有文件将被截断。 有没有完美的解决这个问题? 更新: 没有明确规定的一点是,文件可能并不总是存在的; 在这种情况下,我必须创build一个新文件。 其实我想处理一个configuration文件。 我不知道这是否是好的做法。 或者我应该先放置一个空的configuration文件。 这样就没有必要在意文件不存在了吗? 以下是代码片段: FILE *f = fopen(FILE_PATH, "wb+"); struct record r; if (f) { if (fread((void *)&r, 1, sizeof(struct record), f) { /* File exists, do the normal flow */ } else { if (feof(f)) { /* File is newly […]

即使文件存在,c – fopen也会返回NULL

我试图fopen()在一个完整的UNIXpath,即, fopen("/dir1/file1.raw", "rb"); 该文件在那里,是rw-。 但是,fopen返回NULL。 errno说没有这样的文件或目录。 有任何想法吗?

可以使用fopen来打开URL

是fopen("tftp://1.1.1.1/file.txt","rb"); 一个有效的陈述? 在C编程中可以使用fopenurl吗?

fopen不返回

我在C程序中使用'fopen'以只读模式(r)打开一个文件。 但在我的情况下,我观​​察到fopen调用不会返回。 它不返回NULL或有效的指针 – 执行被阻止在fopen调用。 该补丁的文件是绝对正确的(我已经validation),并没有权限相关的问题。 任何人都可以告诉可能是什么原因这种行为。 任何forms的帮助都是非常可观的。 有什么和gcc或glibc有关的吗? 编辑 这里是示例代码 printf("%s %d\n",__FUNCTION__,__LINE__); if ((fp = fopen(argv[1], "r")) == NULL) { printf("%s %d\n",__FUNCTION__,__LINE__); return; } printf("%s %d\n",__FUNCTION__,__LINE__); 当我运行这个代码时,我只得到第一个打印(在调用fopen之前),之后程序停止。 所以fopen不能完成它的操作。 该文件是一个扩展名为“.conf”的简单configuration文件,该文件可以通过vi,cat等其他方式打开。不应该有任何NFS相关的问题。 文件系统是ext3。 在此先感谢,Souvik

Linux中无缓冲的I / O

我正在写很多很多的数据,这些数据在几个星期内不会被再次读取 – 因为我的程序在机器上运行的可用内存量(以“free”或“top”显示)非常快地下降,内存量应用程序使用不会增加 – 其他进程使用的内存量也不会增加。 这使我相信内存正在被文件系统caching消耗 – 因为我不打算长时间读这个数据,所以我希望绕过系统缓冲区,这样我的数据就直接写到磁盘上了。 我没有梦想改善性能或成为一个超级忍者,我的希望是给文件系统一个提示,我不会马上回来这个内存,所以不花时间优化这些情况。 在Windows上,我遇到了类似的问题,并使用FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH修复了这个问题 – 机器的内存没有被我的应用程序占用,而且机器通用性更好。 我希望能够复制我在Linux上看到的改进。 在Windows系统中,对于扇区大小的文件是有限制的,所以我很高兴这个限制了我测量的增益。 有没有类似的方式来做到这一点在Linux?

多个进程可以使用fopen附加到文件而没有任何并发​​问题?

我有一个进程以append模式打开一个文件。 在这种情况下,它是一个日志文件。 示例代码: int main(int argc, char **argv) { FILE *f; f = fopen("log.txt", "a"); fprintf(f, "log entry line"); fclose(f); } 两个问题: 如果我有多个进程附加到同一个文件,每个日志行会显示不同,或者它们可以在进程上下文切换时交错? 如果大量进程需要访问文件,会写入块吗,从而导致并发问题? 我正在考虑以最简单的forms进行此操作,或者使用zeromq将日志条目通过pipe道泵到日志收集器。 我确实考虑过系统日志,但是我并不想要软件上的任何平台依赖。 默认的平台是Linux的这个顺便说一句。

如何禁用C ++程序的VirtualStore?

当我试图在C:\驱动器的根目录(例如: FILE* FileHandle = fopen("\\file.txt", a) )的受保护位置创build文件时,我想让程序抛出一个错误。 而是在%APPDATA%下的虚拟存储中创build文件。 我怎样才能禁用该虚拟商店? 谢谢 编辑:只是要清楚,我不问如何规避安全性,并在受保护的位置创build我的文件。 我希望文件创build失败,以便我可以告诉用户他是一个白痴。

boost :: filesystem :: path和fopen()

当我尝试这样做时出现错误: path p = "somepath"; FILE* file = fopen(p.c_str(), "r"); 我得到: types为“const boost :: filesystem :: path :: value_type *”的参数与“const char *”types的参数不兼容 谁能告诉我我做错了什么? 谢谢

为什么fopen无法打开存在的文件?

我在Windows XP上使用Visual Studio 6(是的,我知道这是旧的)build立/维护一个C + + DLL。 我遇到了打开一个现有的文件无法打开的问题,它总是返回NULL。 我试过了: 检查errno和_doserrno通过设置为零,然后再次检查它们都保留为零,因此GetLastError()报告没有错误。 我知道fopen在按照C标准遇到错误时不需要设置errno。 硬编码的文件path,这是不相关的。 试了另一个开发者机器,结果相同。 真正奇怪的是CreateFile的作品和文件可以读取文件。 我们相信这是一个发布版本,但是我们在应用程序的其他领域也看到了一些非常奇怪的行为,我们不确定这是否是相关的。 代码如下,我没有看到任何奇怪的,它看起来相当标准的我。 源文件在半年之内没有改变。 HRESULT CDataHandler::LoadFile( CStdString szFilePath ) { //Code FILE* pFile; if ( NULL == ( pFile = fopen( szFilePath.c_str(), "rb") ) ) { return S_FALSE; } //More code }

从Windowsnetworking位置打开文件

我可以从安装的networking驱动器打开文件,但不能从卸载的文件打开,例如\\ mycomp \ folder2 \ hi.bmp 任何解决这个问题?