c++调用c库函数-c/c++,使用fopen()打开文件

问题描述

c/c++,使用fopen()打开文件

用fopen()打开文件,第二个参数“rb+”。当文件不存在时,程序直接崩溃了,try…catch捕捉不到。有没有什么办法,当文件不存在时,程序可以自己创建一个?(用“wb+”当参数,无论文件存在不存在,都会新建一个文件,只是原来的文件会被覆盖掉)

解决方案

不会崩溃吧,你这样写:

if( (fp=fopen("filename","r+b")) == NULL )
{
printf("open file error!n");
return;
}

判断一下打开后的返回值就可以了

解决方案二:

建议楼主百度百科查看fopen函数的参数说明和函数的用法。用"r+b"应该没有错。以二进制读写的方式打开。若想不覆盖则使用append模式,即”a+b”

解决方案三:

你用ab+,这样文件不存在就创建,存在就可以读取,写内容的话就会写入文件末尾。

解决方案四:

 WIN32_FIND_DATA wfd;
bool rValue = false;
HANDLE hFind = FindFirstFile(文件名, &wfd);
if ((hFind != INVALID_HANDLE_VALUE) && (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
    文件存在,继续你的操作
}

解决方案五:

估计你的程序在文件不存在的情况下,继续执行,导致的程序崩溃,所以要进行文件是否存在判断
在C里面推荐两种简单判断文件存在方法。
1. FILE* fh = fopen("hello","r");
if(fh == NULL)
{
printf("%s","can not open the file");
return ;
}

    2 .  if( (_access( "ACCESS.C", 0 )) == -1 )
{
   printf("file no exist");
   return ;
}
    文件存在返回0,不存在返加-1

解决方案六:

你写文件的时候先移动文件指针到末尾fseek

解决方案七:

a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)

a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)

ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。

时间: 2024-09-20 20:54:48

c++调用c库函数-c/c++,使用fopen()打开文件的相关文章

代码-fopen 打开文件失败 求教

问题描述 fopen 打开文件失败 求教 嵌入式linux ,我有一个进程reload ,里面不断去读取一些文件,但开机大概一个里后,就总是出错代码如下: fp = fopen("/proc/gpio","r"); if(fp) { .............. fclose(fp); } else printf("open gpio file error!"); 求教 fopen打开文件不成功的原因有哪些? 解决方案 查看具体错误信息,被占用或

arm printf-__use_no_semihosting 与调用C库函数冲突有什么解决方法

问题描述 __use_no_semihosting 与调用C库函数冲突有什么解决方法 在已经移植freetype代码(使用了大量的C库函数)中,将printf硬件重定向到串口后,#pragma import(__use_no_semihosting_swi)与调用C库函数冲突,错误如下:ERROR:L6915E:Library reports error:__use_no_semihosting_swi was requestedbut _sys_open was referenced 解决方案

c++-不调用任何库函数如何实现stat_word.求大神打救

问题描述 不调用任何库函数如何实现stat_word.求大神打救 请保证代码工整,关键部分请用注释对代码逻辑进行说明 不调用任何库函数实现stat_word,该函数的功能是从字符串str中统计单词个数,str完全由英文字母及空格符组成,连续出现的若干个非空格字符即为一个单词.(5分) int stat_word(const char* str); 解决方案 #include "stdafx.h" #include <iostream> #include <vector

c++-在for_each调用标准库函数对象multiplies后为何下列输出没变

问题描述 在for_each调用标准库函数对象multiplies后为何下列输出没变 #include#include#include#includeusing namespace std::placeholders;using namespace std;int main(){ vectorvec; int i; while(cin>>i) vec.push_back(i); for_each(vec.begin()vec.end()bind(multiplies()_12));// for

qt隐式调用mysql库函数

问题描述 qt隐式调用mysql库函数 系统是64位,安装的qt也是64位的,vs2013也是64位的,mysql在c盘,采用隐式调用,用qt编译项目的时候,已经在Pro中添加了LIBS += -LC:mysqllib -llibmysql,在头文件中也写了#include ,可是项目中有mysql_init的时候,编译时候报错无法解析的外部符号mysql_init,请教是什么问题啊???? 解决方案 http://blog.csdn.net/wang19870102/article/detai

c++调用c库函数-c++调用c的静态库链接错误。使用extern &amp;amp;quot;C&amp;amp;quot;无法解决!

问题描述 c++调用c的静态库链接错误.使用extern "C"无法解决! c++中调用一个c的第三方音频处理库.在c++类成员函数中调用c的函数.库的头文件并未考虑和c++兼容的问题.我在c++头文件内使用extern "C"{} ,大括号内不管是包含c的头文件,还是声明c的函数,都无法解决问题.百度谷歌都是这个办法,请大家帮帮忙.环境: mac os xcode 解决方案 不仅"声明c的函数"要用 extern "C"{}

php打开文件fopen函数的使用说明

本篇文章是对php中的打开文件fopen函数的使用进行了详细的分析介绍,需要的朋友参考下   1.resource  fopen(string  $filename, string $mode [,bool $use_include_path [, resource $zcontext]])函数功能:fopen() 将 filename 指定的名字资源绑定到一个流上.如果filename 是 "scheme://..." 的格式,则被当成一个 URL,PHP 将搜索协议处理器(也被称为

php 使用fopen函数创建、打开文件详解及实例代码_php实例

php中没有单独的文件创建函数,如果我们想创建函数,可以使用fopen(),fopen()函数字面意思是打开文件,但该函数也有创建文件的功能,当使用 fopen() 函数打开一个文件时,如果文件不存在,则会尝试创建该文件,并返回一个资源. php fopen函数介绍 fopen函数打开文件或者 URL 语法: resource fopen( string filename, string mode ) fopen()将 filename 指定的名字资源绑定到一个流上. 参数: 1. filena

php文件调用一个类或方法,生成一个log文件,log文件上输出调用的时间和内容,该怎么写

问题描述 php文件调用一个类或方法,生成一个log文件,log文件上输出调用的时间和内容,该怎么写 php文件调用一个类或方法,生成一个log文件,log文件上输出调用的时间和内容,该怎么写 解决方案 /** 自定义日志 @param string $type @param string $content @return bool */ function mylog($type="",$content=""){ if(!$content || !$type){ r