首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言獲取文件字符數與長度的兩種方法

     編輯:關於C語言

問題背景

在文本模式下讀取文件時,換行符可能被轉換為兩個字符(CR+LF),導致 ftell 返回的文件長度與實際字符數不一致。若需準確獲取字符個數,需採用適當策略。

方法一:基於 fseek/ftell 並一次性讀取

適用於已知文件不大、可一次性載入內存的場景。

FILE *pFile = fopen(pFilePath, "r");
if (pFile == NULL) return 0;

fseek(pFile, 0, SEEK_END);
long iFileLen = ftell(pFile);
rewind(pFile);

char *m_pFileText = new char[iFileLen + 1];
fread(m_pFileText, 1, iFileLen, pFile);
m_pFileText[iFileLen] = '\0';
fclose(pFile);

注意:此法獲取的是文件位元組長度,在文本模式下 Windows 上可能包含 \r\n 兩字節,實際字符數會略少。

方法二:逐字符計數(推薦用於統計字符個數)

逐個讀取字符直到 EOF,直接統計字符數量,不受換行符轉換影響。

FILE *pFile = fopen(pFilePath, "r");
if (!pFile) return 0;

int num = 0;
int ch;
while ((ch = getc(pFile)) != EOF) {
    num++;
}
fclose(pFile);
// num 即為字符個數

總結

  • 需獲取文件位元組大小(如分配緩衝區)用方法一。
  • 需統計邏輯字符數(如處理文本內容)用方法二。
  • 二進制模式("rb")下兩者結果一致。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved