文件访问模式字符串 | 含义 | 若文件不存在实动作 |
---|---|---|
“r” | 从头读 | 打开失败 |
“w | 覆盖写 | 创建新文件 |
“a” | 追加写 | 创建新文件 |
“r+” | 覆盖式可读可写 | 错误 |
“w+” | 覆盖式可读可写 | 创建新文件 |
“a+” | 追加式可读可写 | 创建新文件 |
“rb” | 从头读二进制 | 打开失败 |
“wb” | 覆盖写二进制 | 创建新文件 |
“ab” | 追加写二进制 | 创建新文件 |
“rb+” | 覆盖式可读可写二进制 | 错误 |
“wb+” | 覆盖式可读可写二进制 | 创建新文件 |
“ab+” | 追加式可读可写二进制 | 创建新文件 |
#include
int main() {
// 1.打开文件
FILE* fr = fopen("E:\\work\\testFile\\messfile\\23-11-6\\1.txt", "r"); //以读的方式打开文件
if (fr == NULL) { //file为NULL,则打开文件失败,退出程序
printf("File cannot be opened! \n");
return -1;
}
// 2.读取内容
char buf[0xFF] = { 0 };
// 2.1 按字节块读取
while (!feof(fr)) //没有到文件末尾
{
memset(buf, 0, sizeof(buf));
size_t len = fread(buf, sizeof(char), sizeof(buf), fr); //每次读取sizeof(char)个字节,读取sizeof(buf)次,也可使用fscanf函数
printf("buf: %s, len: %d\n", buf, len);
}
// 2.2 按字行读取,此方法读取中文会有bug
char* str = NULL;
while (!feof(fr))
{
memset(buf, 0, sizeof(buf));
str = fgets(buf, sizeof(buf), fr); //fgets一次最多读取sizeof(buf)个字节,遇到换行符会停止读取
printf("buf: %s \n", buf);
printf("str: %s \n", str); //str 内容和buf内容相同
}
// 2.3 按字符读取
char c = 0;
while (c != EOF)
{
c = fgetc(fr); // 获取一个字符
printf("%c", c);
}
printf("\n");
// 3.关闭文件
if (fclose(fr) != 0)
{
printf("File cannot be closed! \n");
return -1;
}
else
{
printf("File is now closed! \n");
}
return 0;
}
#include
int main(int argc, char* argv[])
{
// 1.打开文件
FILE* fw = fopen("E:\\work\\testFile\\messfile\\23-11-6\\1.txt", "w"); //以读的方式打开文件
if (fw == NULL) { //file为NULL,则打开文件失败,退出程序
printf("File cannot be opened! \n");
return -1;
}
// 2.写入内容
char buf[128] = { 0 };
// 2.1 按数据块写入
char str[] = "南浦凄凄别,西凤袅袅秋。";
memcpy(buf, str, strlen(str));
fwrite(buf, strlen(buf) + 1, 1, fw); //每次写入strlen(buf)个字节,写入1次。可以使用fprint函数
// 2.2 按行写入
while (NULL != fgets(buf, sizeof(buf), stdin)) {
printf("Read line with len: %d\n", strlen(buf));
fputs(buf, fw);
fflush(fw); //刷新输出缓冲区
printf("%s", buf);
}
// 2.3 按字符写入
char ch = getchar();
while (ch != '$')
{
fputc(ch, fw);
ch = getchar();
}
// 3.关闭文件
if (fclose(fw) != 0)
{
printf("File cannot be closed! \n");
return -1;
}
else
{
printf("File is now closed! \n");
}
return 0;
}
int fseek ( FILE * stream, long int offset, int origin );
stream:流
offset:相对应 origin 位置处的偏移量,单位为字节
origin:指针的位置
#define SEEK_CUR 1 // 当前位置
#define SEEK_END 2 // 末尾
#define SEEK_SET 0 // 开头
long int ftell ( FILE * stream );
long n;
fseek(pf,0,SEEK_END);
n=ftell(pf);
int rename ( const char * oldname, const char * newname );
oldname:原名
newname:新名
int remove ( const char * filename );
filename:文件的完整路径
打开方式 | 含义 |
---|---|
ios::in | 从头读 |
ios::out | 覆盖写 |
ios::ate | 文件指针放到尾部 |
ios::app | 追加写 |
ios::trunc | 清空内容 |
ios::binary | 二进制方式打开 |
#include
#include
using namespace std;
int main(int argc, char* argv[])
{
// 1.打开文件
fstream fr;
fr.open("1.txt", ios::in); //以只读模式打开文件
if (!fr.is_open())
std::cerr << "cannot open the file!" << endl;
// 2.读取内容
char buf[1024] = { 0 };
// 2.1 按元素读取
while (fr >> buf)
cout << buf << endl; //每一次的buf是空格或回车键分开的元素
// 2.2 按行取
while (fr.getline(buf, sizeof(buf)))
std::cout << buf << std::endl;
// 2.3 按字符读取
char c;
while ((c = fr.get()) != EOF)
std::cout << c;
// 2.4常用于二进制文件读写,也可以读非二进制文件
fr.read((char*)buf, sizeof(buf)); //读取到buf中,读取sizeof(buf)个字节
cout << buf;
// 3.关闭文件
fr.close();
return 0;
}
#include
#include
using namespace std;
int main(int argc, char* argv[])
{
// 1.打开文件
ofstream fw;
fw.open("1.txt", ios::app); //以追加写模式打开文件
if (!fw.is_open())
std::cerr << "cannot open the file!" << endl;
// 2.写入内容
// 2.1 直接写入
fw << "心断新丰酒,销愁斗几千。" << endl;
// 2.2 常用于二进制写入,也可用于普通文件写入
char buf[1024] = "我未成名君未嫁,可能俱是不如人。";
fw.write((char*)buf, strlen(buf));
// 3.关闭文件
fw.close();
system("pause");
return 0;
}
#include
int main(int argc, char* argv[])
{
// 1.打开文件
HANDLE hFile = CreateFile("1.txt", GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == NULL) {
return -1;
}
// 2.读文件
char buf[128] = { 0 };
DWORD len = 0;
DWORD dwBytesToRead = GetFileSize(hFile, NULL); //获取文件大小
do { //循环读文件,确保读出完整的文件
if (!ReadFile(hFile, buf, dwBytesToRead, &len, NULL)) {
cout << "read file error!" << GetLastError() << endl;
return -1;
}
cout << buf << endl;
dwBytesToRead -= len;
} while (dwBytesToRead > 0);
// 3.关闭文件
CloseHandle(hFile);
return 0;
}
int main(int argc, char* argv[])
{
// 1.打开文件
HANDLE hFile = CreateFile("1.txt", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == NULL) {
return -1;
}
SetFilePointer(hFile, 0, NULL, FILE_END); //文件指针设置到文件尾,实现追加写
// 2.写文件
char buf[128] = { 0 };
DWORD len = 0;
char str[] = "劳歌一曲解行舟,红叶青山水急流,日暮酒醒人已远,满天风雨下西楼。";
memcpy(buf, str, strlen(str));
WriteFile(hFile, buf, strlen(buf), &len, NULL);
FlushFileBuffers(hFile); //刷新缓存
// 3.关闭文件
CloseHandle(hFile);
system("pause");
return 0;
}
CopyFile()
deleteFiles(dir)
#include
if (!GetFileAttributesA(mTempDir.c_str()) & FILE_ATTRIBUTE_DIRECTORY) //mTempDir目录是否存在,不存在则创建目录
resultFlag = CreateDirectory(mTempDir.c_str(), NULL);
//文件句柄,win10用long long,win7用long就可以了
long long hFile = 0;
//文件信息
struct _finddata_t fileinfo;
if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo)) != -1) //第一次查找组合的p起来目录或文件是否存在
{
do
{
if ((fileinfo.attrib & _A_SUBDIR))//如果是目录,迭代之
{
if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)
getFiles(p.assign(path).append("\\").append(fileinfo.name), files, names);
}
else//如果不是,加入列表
files.push_back(p.assign(path).append("\\").append(fileinfo.name));
} while (_findnext(hFile, &fileinfo) == 0);
_findclose(hFile);
}
#include
using namespace std;
int main(int argc, char* argv[])
{
CAtlFile file;
file.Create(L"1.txt", GENERIC_WRITE, 0, OPEN_EXISTING);
char buf[128] = "北斗横天夜欲阑,愁人倚月思无端。";
file.Seek(0, FILE_END);
file.Write(buf, strlen(buf));
file.Flush();
return 0;
}
敬请期待