本文講解的是向.exe同一目錄下的data檔案夾下的log.txt寫入資料。
1.相對路徑概念
假若.exe所在路徑是E:\projects\logout\log\Debug。
1.1向上一級目錄指向
./ 表示目前路徑,相當于E:\projects\logout\log\Debug
../ 表示目前路徑的上一級路徑,相當于E:\projects\logout\log
../../ 表示目前路徑上上一級路徑,相當于E:\projects\logout
更多指向上級路徑的表示以此類推。
1.2 向下一級目錄指向
./data 表示目前路徑下一級路徑,相當于E:\projects\logout\log\Debug\data
./data/xxx 表示目前路徑的下下一級路徑,相當于 E:\projects\logout\log\Debug\data\xxx
更多向下指向的路徑的表示以此類推。
2.檢查檔案路徑是否存在
檢查檔案夾data是否存在。
/**
*@param path 檔案路徑,可以具體到檔案名(如.txt)
*@param mode 檢查模式,00(檔案路徑是否存在),02(隻寫),04(隻讀),06(讀和寫)
*@return -1(失敗)
*/
int _access(const char *path, int mode);
3.建立檔案路徑
如果檔案夾data不存在,則要建立檔案夾。
/**
*@param dirname 檔案路徑,隻能包含檔案夾路徑,不能包含具體檔案名(如.txt)
*@return -1(建立失敗)
*/
int _mkdir(const char *dirname);
4.字元連接配接得到完整路徑
_mkdir建立的是檔案夾路徑,要想得到完整的路徑,就要将它與檔案名連接配接起來。
/**
*将源字元串連接配接到目标字元串後面
*
*@param strDestination 目标字元串
*@param numberOfElements 目标字元串緩沖區大小
*@param strSource 源字元串
*
*numberOfElements是合并字元串後的字元數量。 即,源串大小 + 目标串大小 + 字元串結束符大小("\0")。
*當numberOfElements小于合并字元串後的字元數量時會導緻執行錯誤,它的值必須大于等于合并字元串後的字元數量
*/
errno_t strcat_s(char *strDestination, size_t numberOfElements, const char *strSource );
5.打開檔案
/**
*@param [out]pFile 指向檔案指針的指針,檔案指針将接收指向已打開檔案的指針。
*@param [in]filename 檔案名路徑。
*@param [in]mode 允許的通路類型。
*@return 0(成功)
*/
errno_t fopen_s(FILE** pFile, const char *filename, const char *mode);
字元串
mode
指定對檔案請求的通路類型,如下所示。
"r"
打開以便讀取。 如果檔案不存在或找不到,
fopen_s
調用将失敗。
"w"
打開用于寫入的空檔案。 如果檔案存在,則其内容會被銷毀。
"a"
在檔案末尾打開以進行寫入(追加),在将新資料寫入到檔案之前請勿删除 EOF 标記。 如果檔案不存在,則建立檔案。
"r+"
打開以便讀取和寫入。 (該檔案必須存在。)
"w+"
打開用于讀取和寫入的空檔案。 如果檔案存在,則其内容會被銷毀。
"a+"
打開以進行讀取和追加。 追加操作包括在将新資料寫入檔案之前删除 EOF 标記并在寫入完成後還原 EOF 标記。 如果檔案不存在,則建立檔案。
6.向檔案寫入資料
/**
*@param fileName 檔案名路徑
*@param buf 資料緩沖區
*@return 傳回寫入的位元組數
*/
int fprintf(FILE* fileName,const char* buf);
寫入完成後記得重新整理緩沖區
/**
*重新整理緩沖區
*
*@param stream 檔案名路徑
*@return 0(成功重新整理緩沖區)
*/
int fflush(FILE *stream);
7.關閉檔案
/**
*關閉檔案
*
*@param stream 檔案名路徑
*@return 0(成功關閉),EOF(出現錯誤)
*/
int fclose(FILE *stream);
8.例程
#include "stdafx.h"
#include <direct.h>
#include <io.h>
#include <string.h>
using namespace std;
int main()
{
char path[256] = "./data";
if (_access(path, 00) == -1) //檢查檔案路徑是否存在
{
if (_mkdir(path) == -1) //建立檔案路徑
{
return -1;
}
}
char *file = "/log.txt";
strcat_s(path, sizeof(path), file); //連接配接完整的檔案路徑
FILE* fp;
if (fopen_s(&fp, path, "a") != 0) //打開檔案
return -1;
char buffer[1024] = "A test of file operations.";
int numberOfBuffer = fprintf(fp, buffer); //寫入資料到log.txt
fflush(fp); //重新整理緩沖區
if (fclose(fp) != 0) //關閉檔案
return -1;
return 0;
}
本文多處參考MSDN.。