linux下面 fopen的用法

时间:2022-01-20 16:16:46
   我先得到一个目录,然后在linux的这个目录下面 打开一个固定的文件,没有的话就创建,代码如下:
 
        FILE file;
        string m_strname=getfile_name();//获取目录
        cout<<m_strname<<endl;          //打印出目录 /mnt/1970-01-01 05:17:56.mp4
               file = fopen(m_strname.c_str(),"ab++");
               if(file==NULL)
               {
                   printf("open faile\n");
                }
                                 }
不知道为什么老是打开不成功open faile,是不是这边少了什么东西啊?请 厉害的高手指教一下。、

15 个解决方案

#1


“ab+”

#2


1. 文件使用方式由r,w,a,t,b,+六个字符拼成,各字符的含义是:

  r(read): 读
  w(write): 写
  a(append): 追加
  t(text): 文本文件,可省略不写
  b(banary): 二进制文件
  +: 读和写

  2. 凡用“r”打开一个文件时,该文件必须已经存在,且只能从该文件读出。

  3. 用“w”打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。

  4. 若要向一个已存在的文件追加新的信息,只能用“a ”方式打开文件。但此时该文件必须是存在的,否则将会出错。

  5. 在打开一个文件时,如果出错,fopen将返回一个空指针值NULL。在程序中可以用这一信息来判别是否完成打开文件的工作,并作相应的处理。
 
如果成功的打开一个文件, fopen()函数返回文件指针, 否则返回空指针
(NULL)。由此可判断文件打开是否成功。

#3


file = fopen(m_strname.c_str(),"ab++");
-》
file = fopen(m_strname.c_str(),"ab+");

#4


没有用啊,不是ab++和ab+的问题,问什么就fopen失败呢??

#5


  找到原因了,fopen里面的目录是不能有"-"或者“:”的。

#6



NAME
     fopen - open a stream

SYNOPSIS
     #include <stdio.h>

     FILE *fopen(const char *filename, const char *mode);

DESCRIPTION
     The fopen() function opens the file whose  pathname  is  the
     string  pointed to by filename, and associates a stream with
     it.

     The argument mode points to a string beginning with  one  of
     the following sequences:

     r or rb             Open file for reading.

     w or wb             Truncate to  zero  length or create file
                         for writing.

     a or ab             Append; open or create file for  writing
                         at end-of-file.

     r+ or rb+ or r+b    Open file for update (reading and  writ-
                         ing).

     w+ or wb+ or w+b    Truncate to zero length or  create  file
                         for update.

     a+ or ab+ or a+b    Append; open or create file for  update,
                         writing at end-of-file.

#7


file = fopen(m_strname.c_str(),"ab++");
   if(file==NULL)
   {
   fprintf(stderr, "open file :%s\n", strerror(errno));
   exit(EXIT_FAILURE);
   }
把你的代码修改一下,这样可以打印出错的原因。注意需要添加头文件:
#include <string.h>
#include <errno.h>

#8


引用 7 楼  的回复:
file = fopen(m_strname.c_str(),"ab++");
  if(file==NULL)
  {
  fprintf(stderr, "open file :%s\n", strerror(errno));
  exit(EXIT_FAILURE);
  }
把你的代码修改一下,这样可以打印出错的原因。注意需要添加头文件:
#include <string.h……

楼上说的很对,先打印错误提示,看看哪里出了问题,然后针对问题去改,还有,一般的读写失败,不是因为文件不存在,就是没有权限,linux下最主要的就是权限问题,所以第一个优先检查权限。

#9


楼主把完整的代码,贴出来叫我们学习下...

#10



   FILE file;“ab++”;改为
   
   FILE *file;“ab+”;

#11


1)"ab++"-->"ab+";
2)如果还不行,改改目录权限。

#12


ab++  改为ab+

lz最好做个返回判断!

#13


楼主怎么改好的啊

#14


找到原因了,fopen里面的目录是不能有"-"或者“:”的。

#15


引用 10 楼 yffs163521 的回复:
   FILE file;“ab++”;改为
   
   FILE *file;“ab+”;

这个应该是对的把,为什么楼主直接用的FILE file呢??不是应该是指针的吗?

#1


“ab+”

#2


1. 文件使用方式由r,w,a,t,b,+六个字符拼成,各字符的含义是:

  r(read): 读
  w(write): 写
  a(append): 追加
  t(text): 文本文件,可省略不写
  b(banary): 二进制文件
  +: 读和写

  2. 凡用“r”打开一个文件时,该文件必须已经存在,且只能从该文件读出。

  3. 用“w”打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。

  4. 若要向一个已存在的文件追加新的信息,只能用“a ”方式打开文件。但此时该文件必须是存在的,否则将会出错。

  5. 在打开一个文件时,如果出错,fopen将返回一个空指针值NULL。在程序中可以用这一信息来判别是否完成打开文件的工作,并作相应的处理。
 
如果成功的打开一个文件, fopen()函数返回文件指针, 否则返回空指针
(NULL)。由此可判断文件打开是否成功。

#3


file = fopen(m_strname.c_str(),"ab++");
-》
file = fopen(m_strname.c_str(),"ab+");

#4


没有用啊,不是ab++和ab+的问题,问什么就fopen失败呢??

#5


  找到原因了,fopen里面的目录是不能有"-"或者“:”的。

#6



NAME
     fopen - open a stream

SYNOPSIS
     #include <stdio.h>

     FILE *fopen(const char *filename, const char *mode);

DESCRIPTION
     The fopen() function opens the file whose  pathname  is  the
     string  pointed to by filename, and associates a stream with
     it.

     The argument mode points to a string beginning with  one  of
     the following sequences:

     r or rb             Open file for reading.

     w or wb             Truncate to  zero  length or create file
                         for writing.

     a or ab             Append; open or create file for  writing
                         at end-of-file.

     r+ or rb+ or r+b    Open file for update (reading and  writ-
                         ing).

     w+ or wb+ or w+b    Truncate to zero length or  create  file
                         for update.

     a+ or ab+ or a+b    Append; open or create file for  update,
                         writing at end-of-file.

#7


file = fopen(m_strname.c_str(),"ab++");
   if(file==NULL)
   {
   fprintf(stderr, "open file :%s\n", strerror(errno));
   exit(EXIT_FAILURE);
   }
把你的代码修改一下,这样可以打印出错的原因。注意需要添加头文件:
#include <string.h>
#include <errno.h>

#8


引用 7 楼  的回复:
file = fopen(m_strname.c_str(),"ab++");
  if(file==NULL)
  {
  fprintf(stderr, "open file :%s\n", strerror(errno));
  exit(EXIT_FAILURE);
  }
把你的代码修改一下,这样可以打印出错的原因。注意需要添加头文件:
#include <string.h……

楼上说的很对,先打印错误提示,看看哪里出了问题,然后针对问题去改,还有,一般的读写失败,不是因为文件不存在,就是没有权限,linux下最主要的就是权限问题,所以第一个优先检查权限。

#9


楼主把完整的代码,贴出来叫我们学习下...

#10



   FILE file;“ab++”;改为
   
   FILE *file;“ab+”;

#11


1)"ab++"-->"ab+";
2)如果还不行,改改目录权限。

#12


ab++  改为ab+

lz最好做个返回判断!

#13


楼主怎么改好的啊

#14


找到原因了,fopen里面的目录是不能有"-"或者“:”的。

#15


引用 10 楼 yffs163521 的回复:
   FILE file;“ab++”;改为
   
   FILE *file;“ab+”;

这个应该是对的把,为什么楼主直接用的FILE file呢??不是应该是指针的吗?