c++中 vs 簡單的對txt文件讀寫

讀txt文件

errno_t  fopen_s( FILE** pFile, const char *filename, const char *mode );
errno_t  _wfopen_s( FILE** pFile, const wchar_t *filename, const wchar_t *mode );
pFile  文件指針將接收到打開的文件指針指向的指針。
infilename  文件名。
inmode  允許的訪問類型。
返回值:如果成功返回0,失敗則返回相應的錯誤代碼。
"r"   打開以進行讀取。如果該文件不存在,或無法找到,fopen_s調用失敗。
"w" 打開一個空文件以進行寫入。如果該文件存在,其內容將被銷燬。
"a"打開以進行寫入 (追加) 而不將新數據寫入文件之前刪除的 EOF 標記文件的末尾。如果它不存在,則創建該文件。
"r+"將打開並讀取和寫入。 (該文件必須存在。
"w+"打開一個空的文件進行讀寫。如果該文件存在,其內容將被銷燬。
"a+"將打開並讀取文件和追加。追加操作包括刪除 EOF 標記的新數據寫入到文件並在編寫完成後還原 EOF 標記之前。如果它不存在,則創建該文件。
通過打開文件時"a"或"a+"訪問類型,所有寫操作出現在文件的結尾。可通過使用定位文件指針fseek或rewind,但其始終移回至該文件的末尾之前任何寫入,因此無法覆蓋現有數據執行操作。
"a"模式下不會追加到該文件之前刪除 EOF 標記。追加發生後,MS-DOS TYPE 命令僅顯示最原始的 EOF 標記的數據和追加到文件中沒有任何數據。"a+"模式不會追加到該文件之前刪除的 EOF 標記。後追加,MS-DOS TYPE 命令在文件中顯示所有數據。"a+"模式所需的追加到流文件,將終止通過使用 CTRL + Z EOF 標記。
當"r+","w+",或"a+"指定訪問類型,允許讀取和寫入。 (就說是打開"更新"文件)。 但是,當從閱讀切換到書寫,輸入的操作必須會遇到 EOF 標記。如果沒有任何 EOF,則必須使用中間文件定位函數調用。文件定位函數是fsetpos,fseek,和rewind.從讀數到寫切換時,您必須使用中間調用fflush或文件定位函數。
除了上面的值中,下列字符可以包含在mode指定換行字符的轉換模式:
以文本形式打開 (翻譯) 模式。在此模式中,CTRL + Z 被解釋爲對輸入文件結尾字符中。要讀取/寫入與打開的文件中"a+",fopen_s檢查 CTRL + Z 結尾的文件並移除它,如果可能的話。這是因爲使用fseek和ftell在結尾爲 CTRL + Z,可能會導致文件移動fseek文件末尾附近的不當行爲。
此外,在文本模式下,回車 – 換行組合被翻譯成在輸入時,一個換行符) 和換行符轉換爲回車 – 換行組合輸出上。當 Unicode 流 i/o 函數操作文本模式 (默認值),源或目標流被認爲是多字節字符的序列。因此,Unicode 流輸入函數將多字節字符轉換爲寬字符 (如果通過調用mbtowc函數)。出於同樣的原因,Unicode 流輸出函數將寬字符轉換爲多字節字符 (如果通過調用wctomb函數)。
b打開二進制 (未翻譯) 模式 ; 翻譯涉及回車和換行字符不會顯示。
如果t或b中沒有給出mode,默認轉換模式定義全局變量_fmode。如果t或b將作爲參數,函數將失敗並返回前綴NULL.
有關使用文本和二進制模式中 Unicode 和多字節流 i/o 的詳細信息,請參閱文本和二進制模式文件 I/O和Unicode 文本和二進制模式中的流 I/O。
c啓用提交標記關聯的filename,以便文件緩衝區的內容將直接寫入磁盤,如果任一fflush或_flushall調用。
n重置該提交標記關聯的filename爲"無約束" 這是默認設置。它還重寫全局提交標誌,如果鏈接您的程序使用 COMMODE.OBJ。全球提交標誌默認設置是"無約束" 除非您顯式鏈接您的程序使用 COMMODE。OBJ (請參閱鏈接選項)。
N指定的文件不由子進程繼承。
S指定的緩存優化的但不是限於,順序訪問磁盤。
R指定的緩存優化的但不是限於,隨機訪問磁盤。
T指定臨時文件。如有可能,它未被刷新到磁盤。
D指定臨時文件。最後的文件指針被關閉時,它將被刪除。
ccs=ENCODING  指定編碼的字符集可用於此文件 (utf-8、 UTF-16LE 和 UNICODE)。離開這未指定是否希望 ANSI 編碼。
有效的字符mode中使用的字符串fopen_s和_fdopen對應於oflag參數中使用_ 打開和_sopen。

#define F_PATH "C:\\Users\\徐圖之\\Desktop\\11.txt"
	
FILE *fp;   //fopen_s(&stream,"crt_fopen_s.c","r");
errno_t err;
err = fopen_s(&fp, F_PATH, "r"); //讀取11.txt的文件
if (err==0)
  {
	std::cout << "讀取" << "成功" << std::endl;
  }
else
{
	printf("讀取文件失敗 \n ");
	exit(1);
}
		
while (!feof(fp))
{
	printf("%c", fgetc(fp));//每次獲取一個字符並打印
}

寫入txt

               FILE *fp;   //fopen_s(&stream,"crt_fopen_s.c","r");
		errno_t err;
		err = fopen_s(&fp, F_PATH, "r+"); //讀取11.txt的文件
		if (err==0)
		{
			std::cout << "讀取" << "成功" << std::endl;
		}
		else
		{
			printf("讀取文件失敗 \n ");
			exit(1);
		}

		int i = 0;
		char ch[] = "I'am input something ! \n I 'am here \tI'am here ! \rI'am here";
		while (!feof(fp))
		{
			// printf("du");
			printf("%c", fgetc(fp));//每次獲取一個字符
		}

		
		while (ch[i++] != '\0')
		{
			fputc(ch[i], fp);
		}
		fclose(fp);



CFileDialog FileDlg(FALSE,TEXT(".txt"),NULL,OFN_PATHMUSTEXIST,TEXT("Text Files (*.txt)|*.txt||"),NULL);
 if (IDOK == FileDlg.DoModal())
 {
  CFile file(FileDlg.GetFileName(),CFile::modeCreate|CFile::modeWrite);

  CString str;
  file.SeekToEnd();
  str.Format(_T("BEGIN:\r\n"));
  file.Write(str.GetBuffer(0),str.GetLength());
  str.ReleaseBuffer();

  if (0 == m_ctrlTraverseMode.GetCurSel())//左下角開始捕捉
  {
   for (int i = 0; i < m_nDimension*m_nDimension; i++)
   {
    file.SeekToEnd();
    str.Format(_T("圓 %d\r\n"),i+1);
    file.Write(str.GetBuffer(0),str.GetLength());
    str.ReleaseBuffer();
    
    file.SeekToEnd();
    str.Format(_T("座標 X\t%f\r\n"),*(m_pMatch_x + i));
    file.Write(str.GetBuffer(0),str.GetLength());
    str.ReleaseBuffer();
    
    file.SeekToEnd();
    str.Format(_T("座標 Y\t%f\r\n"),*(m_pMatch_y + i));
    file.Write(str.GetBuffer(0),str.GetLength());
    str.ReleaseBuffer();
   }
  }
  else if(1 == m_ctrlTraverseMode.GetCurSel())//右下角開始捕捉
  {
   for (int i = 0; i < m_nDimension*m_nDimension; i++)
   {
    file.SeekToEnd();
    str.Format(_T("圓 %d\r\n"),i+1);
    file.Write(str.GetBuffer(0),str.GetLength());
    str.ReleaseBuffer();
    
    file.SeekToEnd();
    str.Format(_T("座標 X\t%f\r\n"),(*(m_pMatch_y + i)));//x = y
    file.Write(str.GetBuffer(0),str.GetLength());
    str.ReleaseBuffer();
    
    file.SeekToEnd();
    str.Format(_T("座標 Y\t%f\r\n"),-*(m_pMatch_x + i));//y = -x
    file.Write(str.GetBuffer(0),str.GetLength());
    str.ReleaseBuffer();
   }
  }
  else if(2 == m_ctrlTraverseMode.GetCurSel())//左上角開始捕捉
  {
   for (int i = 0; i < m_nDimension*m_nDimension; i++)
   {
    file.SeekToEnd();
    str.Format(_T("圓 %d\r\n"),i+1);
    file.Write(str.GetBuffer(0),str.GetLength());
    str.ReleaseBuffer();
    
    file.SeekToEnd();
    str.Format(_T("座標 X\t%f\r\n"),(-*(m_pMatch_y + i)));//x = -y
    file.Write(str.GetBuffer(0),str.GetLength());
    str.ReleaseBuffer();
    
    file.SeekToEnd();
    str.Format(_T("座標 Y\t%f\r\n"),*(m_pMatch_x + i));//y = x
    file.Write(str.GetBuffer(0),str.GetLength());
    str.ReleaseBuffer();
   }
  }
  else if(3 == m_ctrlTraverseMode.GetCurSel())//右上角開始捕捉
  {
   for (int i = 0; i < m_nDimension*m_nDimension; i++)
   {
    file.SeekToEnd();
    str.Format(_T("圓 %d\r\n"),i+1);
    file.Write(str.GetBuffer(0),str.GetLength());
    str.ReleaseBuffer();
    
    file.SeekToEnd();
    str.Format(_T("座標 X\t%f\r\n"),(-*(m_pMatch_x + i)));//x = -x
    file.Write(str.GetBuffer(0),str.GetLength());
    str.ReleaseBuffer();
    
    file.SeekToEnd();
    str.Format(_T("座標 Y\t%f\r\n"),-*(m_pMatch_y + i));//y = -y
    file.Write(str.GetBuffer(0),str.GetLength());
    str.ReleaseBuffer();
   }
  }

  file.SeekToEnd();
  str.Format(_T("END:\r\n"));
  file.Write(str.GetBuffer(0),str.GetLength());
  str.ReleaseBuffer();

  file.Close();












發佈了44 篇原創文章 · 獲贊 29 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章