C语言关于文件操作的简单问题!!

来源:百度知道 编辑:UC知道 时间:2024/05/15 17:23:35
问题:创建一个新文件,如果已存在与待创建的文件同名的文件则询问用户是否覆盖
-----------------------------------------------------

我不明白的是怎么判断一个文件是否已存在(用fopen以读方式打开文件来判断文件是否存在有缺陷)
还有一个简单的问题,如何对文件进行部分擦写,如将一个存有
字符串"abbbbbba"的文件中间的字符b消掉,要求是在原文件的基础上操作
------------------------
用fopen("","r");的方法碰上没有读权限时就会出错,另外,如果要对文件进行写操作就必须关掉文件再重新打开,此期间如果有其它程序创建了此文件也会出错,所以这个方法不可取

回外围的爱 :fopen(""","a");方法怎么处理插入和删除操作啊??不会每次都要把后面的东西读出来,改完再写吧?

回zf1987013:麻烦介绍一本有这方面的资料的书好吗?我确实找不到


fopen(filename, "r") == NULL
则文件不存在。没什么副作用。这里其实可能是文件不存在,也可能是无读取权限,不过效果差不多。
如果实在要区分是读取失败是不是由文件不存在导致的,就必须用操作系统提供的系统函数了(在Windows就是API函数),请另查手册。

如果用"r"方式打开文件后要进行写操作,可再用freopen()函数。和关了再打开差不多。

修改已有的文件只要用"a+"或"r+"打开文件,用fscanf()等的进行空读,找到内容再写。
问题主要是文件定位问题。可用ftell()、rewind()、fseek()等函数。
不过一般要进行修改的文件都用二进制文件,内容按确定形式存储,这样方便定位和修改。

注意:插入和删除文件的一部分内容总是很困难的,一般的实现(比如我们常用的文字处理软件)都是把所有内容读入内存,改好后又一股脑儿写到磁盘上。否则磁盘读写相对效率太低,是不能接受的。

下面附The C Programming Language中的一些说明。抱歉只有英文。

// fopen()函数
FILE *fopen(const char *filename, const char *mode)
fopen opens the named file, and returns a stream, or NULL if the attempt fails. Legal values for mode include:
"r" open text file for reading
"w" create text file for writing; discard previous contents if any
"a" append; open or create text file for writing at end of file
"r+" open