天天看点

Clibrary | 【01】文件操作remove、rename、tmpfile、tmpnam

前言

以下是

<cstdio>

中对文件操作的函数。

文章目录

    • 前言
      • 1、remove
      • 2、rename
      • 3、tmpfile
      • 4、tmpnam

1、remove

int remove ( const char * filename );
/*
* @func:删除在filename中指定名称的文件,操作中不涉及任何流;
* @param filename:C字符串,包含要删除的文件的名称;
* return:成功返回 0;失败返回一个非零值;
*/
           

案例:

/*----------------------------------------------------------------------
	> File Name: stdioDemo.cpp
	> Author: Jxiepc
	> Mail: Jxiepc
	> Created Time: Mon 20 Sep 2021 04:20:08 PM CST
----------------------------------------------------------------------*/

#include<iostream>
#include<unistd.h>
#include<cstring>
#include<cstdio>

void myRemove(){
	if(remove("test.txt") != 0)
		perror("Error remove...");
	else
		std::cout << "sucessful..." << std::endl;	
}
           

2、rename

int rename ( const char * oldname, const char * newname );

/*
* @func:将oldname指定的文件或目录的名称更改为newname,操作中不涉及流;
* 		- 若oldname和newname指定不同的路径,则将文件移动到新的位置;
* 		- 若newname存在,该函数可能会失败或覆盖现有文件,这取决于特定的系统和库实现。  
* @param oldname:C 字符串,要更改文件的 名称/路径;
* @param newname :新的文件名;
* return:成功返回 0;失败返回一个非零值;
*/
           

案例:

/*----------------------------------------------------------------------
	> File Name: stdioDemo.cpp
	> Author: Jxiepc
	> Mail: Jxiepc
	> Created Time: Mon 20 Sep 2021 04:20:08 PM CST
----------------------------------------------------------------------*/

#include<iostream>
#include<unistd.h>
#include<cstring>
#include<cstdio>

void myRename(){
	char *oldname = "old.txt";
	char *newname = "new.txt";
	if(rename(oldname, newname) != 0)
		perror("Error rename");
	else
		std::cout << "successful..." << std::endl;
		
}
           

3、tmpfile

FILE * tmpfile ( void );
/*
* @func:打开临时文件
* 		- 创建一个临时二进制文件;
* 		- 当流关闭fclose或程序正常终止时,创建的临时文件会自动删除。
* 		- 如果程序异常终止,是否删除文件取决于具体的系统和库的实现。;
*
* return:指向创建的临时文件的流指针;失败时,返回NULL;
*/
           

案例:

/*----------------------------------------------------------------------
	> File Name: stdioDemo.cpp
	> Author: Jxiepc
	> Mail: Jxiepc
	> Created Time: Mon 20 Sep 2021 04:20:08 PM CST
----------------------------------------------------------------------*/

#include<iostream>
#include<unistd.h>
#include<cstring>
#include<cstdio>

void myTmpfile(){
	char buffer [256];
	FILE * pFile;
	pFile = tmpfile ();
	
	do {
		if (!fgets(buffer,256,stdin)) break;
		fputs (buffer,pFile);
	} while (strlen(buffer)>1);

	rewind(pFile);
		
	while (!feof(pFile)) {
		if (fgets (buffer,256,pFile) == NULL) break;
			fputs (buffer,stdout);
	}
						
	fclose (pFile);	
}
           

4、tmpnam

char * tmpnam ( char * str );
/*
* @func:生成临时文件名
* 		- 使用fopen作为临时文件创建常规文件,一旦文件关闭,程序将调用remove来删除该文件;
* 		- 返回一个字符串,该字符串包不与现有任何文件同名,适合于安全地创建临时文件,而不会有覆盖现有文件的风险;
* 		- 若str是空指针,则生成的字符串存储在一个内部静态数组中,可以通过返回值访问该数组;
*@param str :指向字符数组的指针,建议的临时名称以C字符串的形式存储在该数组中。 这个数组大小至少L_tmpnam字符。  
			或者,可以指定一个空指针,使用一个内部静态数组来存储建议的临时名称,该临时名称的指针由函数返回。  
* return:若str为NULL,则 this 指向一个内部缓冲区(其内容至少保留到下一次调用此函数之前),若str不为NULL,则返回str;
*/
           

案例:

/*----------------------------------------------------------------------
	> File Name: stdioDemo.cpp
	> Author: Jxiepc
	> Mail: Jxiepc
	> Created Time: Mon 20 Sep 2021 04:20:08 PM CST
----------------------------------------------------------------------*/

#include<iostream>
#include<unistd.h>
#include<cstring>
#include<cstdio>

void myTmpnam(){

	char buf[L_tmpnam];
	char *p;
	
	tmpnam(buf);
	std::cout << "传入std:"<< buf <<std::endl;
	
	p = tmpnam(NULL);
	std::cout << "传入NULL:" << p <<std::endl;	
}