在Visual C++中使用fopen()函数来读写文件

C++文件操作安全进阶:从fopen/fscanf到安全函数与跨平台实践 在C/C++编程中,文件I/O操作是处理数据文件、配置和日志的基础。其核心原理涉及内存管理和数据流控制,传统函数fopen和fscanf虽简单易用,但存在缓冲区溢出和错误处理模糊等安全隐患。现代安全编程强调输入验证与边界检查,这直接催生了C11标准的边界检查函数。这些函数通过强制参数验证和明确错误码,显著提升了代码的健壮性,尤其适用于对安全性要求较高的系统开发、数据处理应用及跨平台项目。本文聚焦fopen_s和fscanf_s这两个关键安全函数,深入解析其如何防范缓冲区溢出,并提供从传统函数向安全版本迁移 阅读详情

转帖资料如下:

在Visual C++中使用fopen()函数来读写文件


很多使用过Turbo C的朋友喜欢用fopen()函数来读写文件,在Visual C++环境中您也可以使用fopen()来读写文件。而且您还可以使用Visual C++中的标准的打开文件对话框,这样可以使选取读写文件的路径更方便。具体的做法是这样的。
首 先您需要使用到MFC基本类库,在您原有的Visual C++程序中加上一个由CFileDialog类派生的新类,例如是CMyFileDialog,然后用这个新类定义一个对象,例如是:myDlg,使用 这个对象的DoModal()方法,就可以呼出打开文件的对话框。这样,您只要把被选中的路径名及文件名传送给fopen()函数就可以打开读写这个文件 了。

CMyFileDialog myDlg(true);
定义一个对话框对象
myDlg.DoModal();
呼出打开文件对话框
CString fileName;
定义一个Cstring类型的字符串来存储文件的路径及文件名
fileName=myDlg.GetPathName();
得到文件的路径及文件名

由于fopen()函数中需要的文件名参数是字符型的,所以我们还需要把CString类型的文件名转换为字符类型的变量。

int i, length;
定义i作为循环变量,定义length作为文件路径及文件名的长度
Char* FileName;
定义char型的字符指针来存储文件名,给fopen()函数使用
length=fileName.GetLength();
把文件名的长度赋给length变量
FileName=new char[length];
给char型的指针变量FileName分配内存空间
for(i=0;i<length;i++)
把CString型变量fileName中的字符一个一个地赋给char型的指针变量FileName
*(FileName+i)=fileName.GetAt(i);

*(FileName+length)=NULL;
在FileName变量的最后加上一个结束标志

这样,您就要吧使用fopen(FileName,"w")来写文件,或者是用fopen(FileName,"r")来读文件了。FileName就是使用打开文件对话框得到的文件路径及文件名。

 

总结:其实这种方法我已试过,还是有问题,程序方法正确性以待以后验证。fileread还是可以实现的。

最后的实现方法:

CFileDialog FileDlg(TRUE);
 FileDlg.m_ofn.lpstrTitle = TEXT("open yuv");
 FileDlg.m_ofn.lpstrFilter = TEXT("yuv file/0*.yuv/0all files/0*.*/0/0");

 if(FileDlg.DoModal()==IDCANCEL)
 {
  return;
 } 

 

 if(m_hFile)
 {
  CloseHandle(m_hFile);
  m_hFile=NULL;
 }

HWND m_hFile;

 m_hFile=CreateFile(FileDlg.GetPathName(),GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);

 

int f;f是帧数

SetFilePointer(m_hFile,f*(draw_width*draw_height*1.5),NULL,FILE_BEGIN);
ReadFile(m_hFile,lpAllYUV,draw_height*draw_width*1.5,&dwRead,NULL);

谨以此记录

 

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/prophet08/archive/2007/04/26/1585476.aspx

关于C语言fopen()在VS2019上不安全的问题 错误提示如下: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 解决方法: 点击 项目->属性 C/C++ ->预处理器 在预处理器定义中添加,点击 编辑 _CRT_SECURE_NO_... 阅读详情

相关推荐

Visual C++ 文件读写操作

Visual C++ 文件读写操作 源代码

C语言open,read,write函数,及文件读写

open文件:#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>定义函数: int open(const char * pathname, int flags); int open(const char * pathname, int flags, mode_t mode);函数说明:参数 pat

centor的博客 2万+

VS文件操作--fopen函数总结

fopen用法: fp = fopen(filename,“mode”) mode参数 r, w, a, r+, w+, a+ 具体区别: r : 只能读, 必须存在, 可在任意位置读取 w : 只能写, 可以不存在, 必会擦掉原有内容从头写 a : 只能写, 可以不存在, 必不能修改原有内容, 只能在结尾追加写, 文件指针无效 r+ : 可读可写, 必须存在, 可在任意位置读写, 读与写共用同一个指针 w+ : 可读可写, 可以不存在, 必会擦掉原有内容从头写 a+ : 可读可写, 可以不存在, 必不能修

WW、forever的博客 8788

转载:在Visual C++使用fopen()函数读写文件

CSDN - 文档中心 - Visual C++

prophet08的专栏 2652

Visual C++编程中的文件操作

 Visual C++编程中的文件操作各种关于文件的操作在程序设计中十分常见,如果能对这些操作都了如指掌,就可以根据实际情况找到最佳的解决方案,从而可以在较短的时间内编写出高效的代码。本文对Visual C++中有关文件操作进行了全面的介绍,并对在文件操作中经常遇到的一些疑难问题进行了详细分析。    1. 文件的查找    当对一个文件操作时,如果不知道该文件是否存在,就要首先进行查找。MF

jiangxinyu的专栏 684

CString文件路径 使用fopen打开

<br />一般文件都是通过文件打开对话框获得的,文件路径是CSTring类型。有些人比较钟爱C语言的File格式,因此希望使用fopen函数,而该函数的第一个参数(文件路径)是char *类型的,故没法直接使用cstring类型。如果将cstring转成char *貌似也不行,因为cstring中隐藏了一些特殊字符的转义,如‘/’,这样在转换后的char *里没法识别文件路径。本人尝试通过在每个‘/’之后再添加一个'/',然而由于文件路径中有中文字符,处理起来比较麻烦,没有成功~最后通过以下方法完美解决:

goodbaby728的专栏 5788

Visual C++使用fopen()函数读写文件 (转)

Visual C++使用fopen()函数读写文件 (转)[@more@]在Visual C++使用fopen()函数读写文件 刘志荣 很多使用过Turbo C的朋友喜欢用fopen()函数读写文件,在Visual ...

csd3176的博客 223

vs2019中fopenfopen_s)函数注意事项!

在之前的vs版本中的文件操作fopen函数操作如下 运行下列代码就可以在制定文件夹创建一个指定格式的文件并输入两行代码 #include <iostream> int main() { FILE* fp = NULL; fp=fopen("D:\\study-C++\\test.txt", "w+"); fprintf(fp,"this is test\n"); fputs("test",fp); fclose(fp); return 0; } 但是到了vs2019版本中就会显示如

weixin_47978722的博客 1万+

VS中fopen_s函数的用法(fopen函数的扩展)

使用方法: 首先看fopen的代码: FILE* fp = null; fp = fopen(filename,"w+") if(fp!=null) { // 打开文件成功 } 再来看fopen_s的用法: FILE* fp = null; errno_t err = 0; err = fopen_s(&fp,filename,"w+") if(err==0) { // 打开文件成功 } 参考文章:vs中,fopen_s函数怎么用,能不能举个例子? ...

Dontla的博客 1万+

C\C++ 打开文件 fopenfopen_s用法

测试环境:vs 2019 今天学习敲代码中,用fopen打开文件vs报错 fopen 对于fopen来说,打开文件成功的话返回文件指针(赋值给fp),打开失败则返回NULL值; 去网上翻了翻,原因是VS的高版本对文件操作的安全性有了较高的要求,需要使用fopen_s fopen_s 对于fopen_s来说,打开文件成功返回0,失败返回非0。 区别: fopen_s的安全是在于比函数fopen多了溢出检测。在使用上,有助于人们排查问题。 ...

weixin_54373148的博客 3169

fopen函数在VS2017C++版本中不安全的问题

fopen函数在VS2017C++版本中不安全的问题 error C4996: ‘fopen’: This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for deta...

萤火之光 1万+

fopen函数报错

vs2012中使用fopen出现的错误:error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 我看

qiminglau的专栏 8947

C++中对文本文件(txt)进行数组读写

项目场景: 一直以来对txt文件读写操作都停留在stdio.h中的fopen函数,最近在VS2019(社区版)的使用过程中发现该函数已被弃用,上网一顿查才知道有专门的fstream头文件使用起来也更加方便。 问题描述 在VS2019使用fopen函数打开一个文本文件,(文件必须存在,只允许读)。 ////////// 读取数据 ////////////// FILE* fp; fopen( "test.txt", "rt"); 程序执行到fopen时会报C4996错,原因就是

qq_41870168的博客 2901

【入门】Visual Studio 2019 运行C++ 流程记录

目录创建C++项目如何运行调出文件夹目录创建新的项目问题整理fopen()报错 欢迎大家评论批评,如果有人来看的话。 创建C++项目 初次使用VS2019跑C++的程序,发现在新建立项目的时候没有办法选择创建C++项目,查看很多文章后发现是在最初下载的时候有一个选项没有勾选。 点开Win的图标找到Visual Studio Installer的选项点开-> 点击修改键-> 勾选使用C++的桌面开发-> 再次点开新建项目的时候可以创建C++项目了。 如何运行 我的代码是其他人在VS6.

qq_44697739的博客 3653

Visual Stdio fopen错误

Visual Stdio fopen错误出现问题解决方案 出现问题 将C语言代码从codeblocks复制到Visual Stdio 2013中,生成解决方案时出现 ‘fopen’: This function or variable may be unsafe. Consider using fopen_s instead. 如图所示: 解决方案 项目->train_network属性 配置属性->c/c+±>预处理器 预处理器定义->编辑 输入_CRT_SECURE_NO

qq_35406255的博客 1971

visual c++ 操作UTF-8

微软的C/C++ CRT不支持UTF-8的locale,

mujiok2003的专栏 1277
上一篇: GetWindowTextW(LPTSTR,int) const' :cannot convert parameter 1 from 'char[10]
下一篇: CreateFile函数详解
cherry_xidian
博客等级 码龄16年 15粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值