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();












  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值