_wfopen_s循环使用中途不能matlab循环打开文件件

关于函数 _wfopen_s() ?_百度知道
关于函数 _wfopen_s() ?
请问该函数,前面的前缀
_s 表示什么啊?为什么要加上这两个东西?加上这两个后,和 函数 fopen( ) 有什么不同了?
我有更好的答案
_wfopen_s()不是标准C里的函数,只能在windows上用,Linux下没有这个函数。fopen()你应该很清楚了,就是你传入一个文件名和读写模式,然后它就给你一个FILE*句柄。文件名是char *类型的。_wfopen_s()跟fopen()有两点区别:1. _w表示传入的参数是wchar_t *类型的。就是说,你必须传入unicode字符串。在中文操作系统里,日文,韩文或者泰文等非拉丁语系的文字,如果用普通字符串表示,可能会显示成乱码,这个时候你用fopen()函数就没法打开指定的文件。反之,中文在其他语言的操作系统里也有一样问题。而unicode就没有这个问题,所以最好用_w版本的fopen。2. _s表示该函数是线程安全的。就是说fopen()是非线程安全的,而_wfopen_s()是线程安全的。关于线程安全的定义,你自己用搜索引擎搜一下就知道了。
采纳率:60%
来自团队:
我建议看看该函数的定义,如果只是个宏的话,那就可以这个“W”和“S”只是为了语义的需要了
为您推荐:
其他类似问题
函数的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。无法定位程序输入点_snwprintf_s于动态链接msvcrt.dll_百度知道
无法定位程序输入点_snwprintf_s于动态链接msvcrt.dll
如题。。求助。。电脑是XP的。。就学校的教务系统进不去。。
我有更好的答案
丢失DLL文件吧,修复看看msvcrt.dll(名称:Microsoft C Runtime Library)提供了printf,malloc,strcpy等C语言库函数,并且为使用C/C++(Vc)编绎的程序提供了初始化(如获取命令行参数)以及退出等功能.&可以用腾讯电脑管家修复下。打开电脑管家——电脑诊所——软件问题——缺少dll文件。如果不行,那就只有去网上下载了,(注意安全哈,扫描下)去搜:vc2010 ,下载装上就好了第一个就是多特,记得分清你的系统是64位还是32位的,64位的就装x64,32位的就装x86的那个文件直接拷贝该文件到系统目录里:1、Windows 95/98/Me系统,则复制到C:\Windows\System\ 目录下。2、Windows NT/2000系统,则复制到C:\WINNT\System32\ 目录下。3、Windows XP系统,则复制到C:\Windows\System32\ 目录下。&程序的话,尝试使用兼容模式和管理员权限运行游戏试试,操作:程序上→属性→兼容性→勾选上 使用管理员权限运行 同时 使用xp sp3 的兼容模式。
采纳率:85%
来自团队:
丢失dll文件吧下载缺失的dll文件直接拷贝该文件到系统目录里:Windows XP系统,则复制到C:\Windows\System32\ 目录下。还可以尝试点击开始――运行输入msconfig回车,在里边的启动栏里把**.dll前面的勾去掉就行了。1(打开启动对话框)――步骤如下:开始-运行-msconfig-启动-把加载项***.dll的那个勾勾去掉。 重启电脑,通常到这就可以了,如果还弹出来再进行第二步; 2(打开注册表)――步骤如下:开始-运行-regedit: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run在下面的位置删除相应键值3使用腾讯电脑管家,打开腾讯电脑管家然后找到电脑诊所在搜索栏中搜(遇到的问题)然后选择立即修复就可以了。腾讯电脑管家,是腾讯公司推出的一款免费安全软件,能有效预防和解决计算机上常见的安全风险。拥有云查杀木马,系统加速,漏洞修复,实时防护,网速保护,电脑诊所,健康小助手等功能,且首创了“管理+杀毒”二合一的开创性功能 依托管家云查杀和第二代自主研发反病毒引擎“鹰眼”,小红伞(antivir) 管家系统修复引擎和金山云查杀引擎,拥有腾讯账号全景防卫系统,尤其针对网络钓鱼欺诈及盗号打击方面,有更加出色的表现,在安全防护及病毒查杀方面的能力已经达到了国际一流杀软的同等水平,能够全面保障电脑安全。
为您推荐:
其他类似问题
定位程序输入点的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!fopen、_wfopen
不是 IT 专业人员?
TechNet 库
建议使用 Visual Studio 2017
fopen、_wfopen
Visual Studio 2015
发布日期: 2016年7月若要了解有关 Visual Studio 2017 RC 的最新文档,请参阅 。打开文件。 这些执行附加参数验证并返回错误代码的函数有更安全的版本可用;请参阅 。
FILE *fopen(
const char *filename,
const char *mode
FILE *_wfopen(
const wchar_t *filename,
const wchar_t *mode
文件名。mode
启用的访问类型。这些函数均返回指向打开文件的指针。 一个 null 指针值指示错误。 如果 filename 或 mode 为 NULL 或空字符串,这些函数将触发无效的参数处理程序(如中所述)。 如果允许执行继续,则这些函数将返回 NULL 并将 errno 设置为 EINVAL。有关详细信息,请参阅。fopen 函数打开 filename指定的文件。 默认情况下,使用 ANSI 代码页 (CP_ACP) 解释窄 filename 字符串。 在 Windows 桌面应用程序中,可以通过使用
函数将此更改为 OEM 代码页 (CP_OEMCP)。 可以使用
函数来确定是使用 ANSI 还是系统默认的 OEM 代码页来解释 filename 。 _wfopen 是 fopen 的宽字符版本;_wfopen 的参数是宽字符串。 除此以外,_wfopen 和 fopen 的行为完全相同。 仅使用 _wfopen 不会影响在文件流中使用的编码字符集。fopen 接受执行时在文件系统上有效的路径;fopen 还接受 UNC 路径和包含映射的网络驱动器的路径(前提是执行代码的系统在执行时能够访问共享或映射的驱动器)。 为 fopen构造路径时,请确保驱动器、路径或网络共享在执行环境中可用。 您可以使用正斜杠 (/) 或反斜杠 (\) 作为路径中的目录分隔符。对文件执行任何其他操作前,请始终检查返回值以确定指针是否为 NULL。 如果发生错误,系统将设置全局变量 errno ,此变量可用于获取特定错误信息。 有关详细信息,请参阅。fopen 支持 Unicode 文件流。 若要打开 Unicode 文件,请将指定所需编码的 ccs 标志传递到 fopen,如下所示。FILE *fp = fopen("newfile.txt", "rt+, ccs=encoding");允许使用的 encoding 值为 UNICODE、 UTF-8和 UTF-16LE。在 Unicode 模式下打开文件时,输入函数会将从文件中读取的数据转换为存储为 wchar_t类型的 UTF-16 数据。 写入到在 Unicode 模式下打开的文件的函数需要包含存储为 wchar_t类型的 UTF-16 数据的缓冲区。 如果将文件编码为 UTF-8,则在写入它时,UTF-16 数据会转换为 UTF-8;在读取它时,该文件的 UTF-8 编码的内容会转换为 UTF-16。 尝试在 Unicode 模式下读取或写入奇数个字节会导致
错误。 若要读取或写入在你的程序中存储为 UTF-8 的数据,请使用文本或二进制文件模式,而不是 Unicode 模式。 你应负责所有必需的编码转换。如果文件已存在并已打开以进行读取或追加,字节顺序标记 (BOM)(如果文件中有)将确定编码。 BOM 编码优先于 ccs 标志指定的编码。 只有在没有 BOM 或文件是新文件时,才使用 ccs 编码。 说明
BOM 检测仅适用于在 Unicode 模式下(即通过传递 ccs 标志)打开的文件。下表汇总的模式用于传递到文件中的 ccs 和字节顺序标记的各种 fopen 标志。ccs 标志无 BOM(或新文件)BOM:UTF-8BOM:UTF-16UNICODEUTF-16LEUTF-8UTF-16LEUTF-8UTF-8UTF-8UTF-16LEUTF-16LEUTF-16LEUTF-8UTF-16LE在 Unicode 模式下打开以进行写入的文件将自动写入 BOM。如果 mode 为“a, ccs=&encoding&”, fopen 将先尝试使用读取和写入访问权限打开文件。 如果成功,此函数将读取 BOM 以确定文件的编码;如果失败,此函数将使用文件的默认编码。 无论何种情况, fopen 随后均将使用只写访问权限打开文件。 (这仅适用于 a 模式,不适用于 a+ 模式。)TCHAR.H 例程未定义 _UNICODE 和 _MBCS已定义 _MBCS已定义 _UNICODE_tfopenfopenfopen_wfopen字符串 mode 指定为文件请求的访问类型,如下所示。"r"
打开以便读取。 如果文件不存在或找不到, fopen 调用将失败。"w"
打开用于写入的空文件。 如果给定文件存在,则其内容会被销毁。"a"
在文件末尾打开以进行写入(追加),在新数据写入到文件之前不移除文件末尾 (EOF) 标记。 创建文件(如果文件不存在)。"r+"
打开以便读取和写入。 文件必须存在。"w+"
打开用于读取和写入的空文件。 如果文件存在,则其内容会被销毁。"a+"
打开以进行读取和追加。 追加操作包括在新数据写入文件之前移除 EOF 标记。 写入完成后,EOF 标记不会还原。 创建文件(如果文件不存在)。使用 "a" 访问类型或 "a+" 访问类型打开文件时,所有写入操作均将在文件末尾进行。 使用 fseek 或 rewind可重新定位文件指针,但在执行任何写入操作前,文件指针将始终被移回文件末尾。 因此,无法覆盖现有数据。在 EOF 标记追加到文件之前, "a" 模式不会将其移除。 在追加后,MS-DOS TYPE 命令只显示原始 EOF 标记之前的数据,不显示追加到文件的任何数据。 EOF 标记追加到文件之前, "a+" 模式不会将其移除。 在追加后,MS-DOS TYPE 命令显示文件中的所有数据。 需使用 "a+" 模式才能附加到通过 CTRL+Z EOF 标记终止的流文件。指定 "r+"、 "w+"或 "a+" 访问类型时,允许读取和写入(文件将处于打开状态以进行“更新”)。 但是,当你从读取切换到写入时,输入操作必须遇到 EOF 标记。 如果没有 EOF,必须使用对文件定位函数的干预调用。 文件定位函数是 fsetpos、 fseek和 rewind。 从写入切换到读取时,必须使用对 fflush 或文件定位函数的干预调用。除了前面的值以外,可将以下字符追加到 mode 以指定换行符的转换模式。t
在文本(转换)模式下打开。 在此模式下,CTRL+Z 将在输入时解释为 EOF 字符。 在使用 "a+"打开以进行读取/写入的文件中, fopen 将检查文件末尾的 CTRL+Z 并将其删除(如果可能)。 这是因为使用 fseek 和 ftell 在以 CTRL+Z 结尾的文件中移动时,可能导致 fseek 在文件末尾附近错误运行。在文本模式下,输入时,回车-换行组合将转换为单一的换行,输出时,换行字符将转换为回车-换行组合。 当 Unicode 流 I/O 函数在文本模式(默认设置)下运行时,源或目标流将假定为一系列多字节字符。 因此,Unicode 流输入函数将多字节字符转换为宽字符(就像调用 mbtowc 函数一样)。 出于同一原因,Unicode 流输出函数将宽字符转换为多字节字符(就像调用 wctomb 函数一样)。b
在二进制(未转换)模式下打开;不进行涉及回车和换行字符的转换。如果 t 或 b 在 mode中未给出,则默认转换模式由全局变量 定义。 如果 t 或 b 是该参数的前缀,则函数将失败并返回 NULL。有关如何在 Unicode 和多字节流 I/O 中使用文本和二进制模式的详细信息,请参阅
启用关联 filename 的提交标志,以便在调用 fflush 或 _flushall 时将文件缓冲区的内容直接写入磁盘。n
将关联 filename 的提交标志重置为“no-commit”。 这是默认设置。 如果将程序显式链接到 COMMODE.OBJ,它还将重写全局提交标志。 除非将程序显式链接到 COMMODE.OBJ,否则全局提交标志默认为“no-commit”(请参阅 )。N
指定文件不由子进程继承。S
指定缓存针对(但不限于)从磁盘的顺序访问进行优化。R
指定缓存针对(但不限于)从磁盘的随机访问进行优化。T
将文件指定为临时。 如果可能,它不会刷新到磁盘。D
将文件指定为临时。 最后一个文件指针关闭时,它将被删除。ccs=ENCODING
指定要使用的编码字符集(UTF-8、 UTF-16LE或 UNICODE)。 如果需要 ANSI 编码,请不要指定此字符集。mode 和 fopen 中使用的 _fdopen 字符串的有效字符与 oflag _open
_sopen 参数对应,如下所示:模式字符串中的字符等效oflag值_open/_sopena_O_WRONLY | _O_APPEND(通常为 _O_WRONLY | _O_CREAT | _O_APPEND)a+_O_RDWR | _O_APPEND(通常为 _O_RDWR | _O_APPEND | _O_CREAT)r_O_RDONLYr+_O_RDWRw_O_WRONLY(通常为 _O_WRONLY | _O_CREAT | _O_TRUNC)w+_O_RDWR(通常为 _O_RDWR | _O_CREAT | _O_TRUNC)b_O_BINARYt_O_TEXTc无n无S_O_SEQUENTIALR_O_RANDOMT_O_SHORTLIVEDD_O_TEMPORARYccs=UNICODE_O_WTEXTccs=UTF-8_O_UTF8ccs=UTF-16LE_O_UTF16如果你使用 rb 模式、不必移植代码、希望读取大文件中的大部分内容或不担心网络性能,你可能还要考虑是否使用内存映射的 Win32 文件方式。函数必需的标头fopen&stdio.h&_wfopen&stdio.h& 或 &wchar.h&_wfopen 是 Microsoft 扩展。 有关兼容性的更多信息,请参见 。c, n, t, S, R, T和 D mode 选项是 fopen 和 _fdopen 和 should not be used where ANSI portability is desired.以下程序打开两个文件。
它使用 fclose 关闭第一个文件,使用 _fcloseall 关闭所有剩余文件。
// crt_fopen.c
// compile with: /W3
// This program opens two files. It uses
// fclose to close the first file and
// _fcloseall to close all remaining files.
#include &stdio.h&
FILE *stream, *stream2;
int main( void )
// Open for read (will fail if file "crt_fopen.c" does not exist)
if( (stream
= fopen( "crt_fopen.c", "r" )) == NULL ) // C4996
// Note: consider using fopen_s instead
printf( "The file 'crt_fopen.c' was not opened\n" );
printf( "The file 'crt_fopen.c' was opened\n" );
// Open for write
if( (stream2 = fopen( "data2", "w+" )) == NULL ) // C4996
printf( "The file 'data2' was not opened\n" );
printf( "The file 'data2' was opened\n" );
// Close stream if it is not NULL
if( stream)
if ( fclose( stream ) )
printf( "The file 'crt_fopen.c' was not closed\n" );
// All other files are closed:
numclosed = _fcloseall( );
printf( "Number of files closed by _fcloseall: %u\n", numclosed );
The file 'crt_fopen.c' was opened
The file 'data2' was opened
Number of files closed by _fcloseall: 1
以下程序在具有 Unicode 编码的文本模式下创建文件(或在文件存在时覆盖文件)。
然后,它将两个字符串写入文件并关闭文件。 输出是名为 _wfopen_test.xml 的文件,其中包含输出部分中的数据。
// crt__wfopen.c
// compile with: /W3
// This program creates a file (or overwrites one if
// it exists), in text mode using Unicode encoding.
// It then writes two strings into the file
// and then closes the file.
#include &stdio.h&
#include &stddef.h&
#include &stdlib.h&
#include &wchar.h&
#define BUFFER_SIZE 50
int main(int argc, char** argv)
wchar_t str[BUFFER_SIZE];
// Create an the xml file in text and Unicode encoding mode.
if ((fileHandle = _wfopen( L"_wfopen_test.xml",L"wt+,ccs=UNICODE")) == NULL) // C4996
// Note: _ consider using _wfopen_s instead
wprintf(L"_wfopen failed!\n");
return(0);
// Write a string into the file.
wcscpy_s(str, sizeof(str)/sizeof(wchar_t), L"&xmlTag&\n");
strSize = wcslen(str);
if (fwrite(str, sizeof(wchar_t), strSize, fileHandle) != strSize)
wprintf(L"fwrite failed!\n");
// Write a string into the file.
wcscpy_s(str, sizeof(str)/sizeof(wchar_t), L"&/xmlTag&");
strSize = wcslen(str);
if (fwrite(str, sizeof(wchar_t), strSize, fileHandle) != strSize)
wprintf(L"fwrite failed!\n");
// Close the file.
if (fclose(fileHandle))
wprintf(L"fclose failed!\n");
此页面有帮助吗?
更多反馈?
1500 个剩余字符
我们非常感谢您的反馈。
页面加载速度够快吗?
您喜欢网页的设计吗?
请告诉我们更多意见

我要回帖

更多关于 python循环打开文件夹 的文章

 

随机推荐