user-0 提问: fopen 写到文件内容部正确，哪儿有问题？

回复:
user: user-0
content: 引用 7 楼 zjq9931 的回复:[quote=引用 5 楼 aaadddzxc 的回复:] VS2013 UP2 WIN7SP1 打开文件时的，w+换成wb，或者wb+[/quote]  谢谢 wb+ 就行了！

user: user-1
content: 引用 5 楼 aaadddzxc 的回复:VS2013 UP2 WIN7SP1 打开文件时的，w+换成wb，或者wb+

user: user-2
content: int _tmain(int argc, _TCHAR* argv[]) {     LPCTSTR lpszBuff = _T("MainVersion = 20140811\r\nMainDescription = http://www.1111.org/updatades.txt\r\nMainFileList = http ://www.1111.org/updatalist.txt");     LPCTSTR lpszPath = _T("C:\\Users\\qyt\\Desktop\\Win32Project1\\updatalist.txt");     FILE *pSt_File = NULL;     if (0 != _tfopen_s(&pSt_File,lpszPath,_T("wb")))     {         return 1;     }     if (NULL == pSt_File)     {         return 2;     }     int nBuffferLen = _tcslen(lpszBuff);     int nCount = 0;     int nRet = fwrite(lpszBuff,sizeof(TCHAR),nBuffferLen,pSt_File);     if (nRet!=nBuffferLen) {         fclose(pSt_File);         return 3;     }     fclose(pSt_File);     return 0; }  推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。  不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,fread,fwrite,fgetc,fclose  //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了

user: user-0
content: VS2013 UP2 WIN7SP1

user: user-0
content: 我又调试了下，发现   int _tmain(int argc, _TCHAR* argv[]) { 	LPCTSTR lpszBuff = _T("MainVersion = 20140811 MainDescription = http://www.1111.org/updatades.txt MainFileList = http ://www.1111.org/updatalist.txt"); 	LPCTSTR lpszPath = _T("C:\\Users\\qyt\\Desktop\\Win32Project1\\updatalist.txt"); 	FILE *pSt_File = NULL; 	if (0 != _tfopen_s(&pSt_File,lpszPath,_T("w+"))) 	{ 		return 0; 	} 	if (NULL == pSt_File) 	{ 		return 0; 	} 	int nBuffferLen = _tcslen(lpszBuff); 	int nCount = 0; 	while (TRUE) 	{ 		int nRet = fwrite(lpszBuff + nCount,sizeof(TCHAR),nBuffferLen - nCount,pSt_File); 		nCount += nRet;  		if (nCount >= nBuffferLen) 		{ 			break; 		} 	} 	fclose(pSt_File); 	return 0; }     发现只要  _T("MainVersion = 20140811 MainDescription = http://www.1111.org/updatades.txt MainFileList = http ://www.1111.org/updatalist.txt"); 换成   LPCTSTR lpszBuff = _T("MainVersion = 20140811\r\nMainDescription = http://www.1111.org/updatades.txt\r\nMainFileList = http ://www.1111.org/updatalist.txt");  格式就有问题，怎么回事？加了换行符就出错了

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:int nRet = fwrite(lpszBuff + nCount,nBuffferLen - nCount,sizeof(TCHAR),pSt_File);  还是一样 写出的内容有问题  引用 1 楼 zjq9931 的回复:[quote=引用 楼主 aaadddzxc 的回复:]   int _tmain(int argc, _TCHAR* argv[]) { 	LPCTSTR lpszBuff = _T("MainVersion = 20140811\r\nMainDescription = http://www.1111.org/updatades.txt\r\nMainFileList = http ://www.1111.org/updatalist.txt"); 	LPCTSTR lpszPath = _T("C:\\Users\\qyt\\Desktop\\Win32Project1\\updatalist.txt"); 	FILE *pSt_File = NULL; 	if (0 != _tfopen_s(&pSt_File,lpszPath,_T("w+"))) 	{ 		return 0; 	} 	if (NULL == pSt_File) 	{ 		return FALSE; 	} 	int nBuffferLen = _tcslen(lpszBuff); 	int nCount = 0; 	while (TRUE) 	{ 		int nRet = fwrite(lpszBuff + nCount,nBuffferLen - nCount,1,pSt_File); 		nCount += nRet;  		if (nCount >= nBuffferLen) 		{ 			break; 		} 	} 	fclose(pSt_File); 	return 0; }   错误一： LPCTSTR lpszBuff = _T("MainVersion = 20140811\r\nMainDescription = http://www.1111.org/updatades.txt\r\nMainFileList = http ://www.1111.org/updatalist.txt");  LPCTSTR lpszPath = _T("C:\\Users\\qyt\\Desktop\\Win32Project1\\updatalist.txt"); ------------------------- 这里可能会有问题。在开启unicode编码的模式下。 建议用_TCHAR*   错误二： 如果你打开了UNICODE模式，那么，写到文件里面的是unicode编码的字符，那么unicode编码的文件，要求最开始两个字节是（0xff，0xfe，UTF16），所以如果直接写的是unicode码的数据，而文件最开始两个字节又不是这两个，那么看起来就会是乱码，或者不对。 解决办法是： sizeof(_TCHAR)，如果是2，则就是unicode码的那么在文件最开始写上那两个字节。如果是1，那么就不用写那两个字节。[/quote]   UNICODE是个问题，但是ANSI也是出问题

user: user-2
content: int nRet = fwrite(lpszBuff + nCount,nBuffferLen - nCount,sizeof(TCHAR),pSt_File);

user: user-1
content: 引用 楼主 aaadddzxc 的回复:  int _tmain(int argc, _TCHAR* argv[]) { 	LPCTSTR lpszBuff = _T("MainVersion = 20140811\r\nMainDescription = http://www.1111.org/updatades.txt\r\nMainFileList = http ://www.1111.org/updatalist.txt"); 	LPCTSTR lpszPath = _T("C:\\Users\\qyt\\Desktop\\Win32Project1\\updatalist.txt"); 	FILE *pSt_File = NULL; 	if (0 != _tfopen_s(&pSt_File,lpszPath,_T("w+"))) 	{ 		return 0; 	} 	if (NULL == pSt_File) 	{ 		return FALSE; 	} 	int nBuffferLen = _tcslen(lpszBuff); 	int nCount = 0; 	while (TRUE) 	{ 		int nRet = fwrite(lpszBuff + nCount,nBuffferLen - nCount,1,pSt_File); 		nCount += nRet;  		if (nCount >= nBuffferLen) 		{ 			break; 		} 	} 	fclose(pSt_File); 	return 0; }   错误一： LPCTSTR lpszBuff = _T("MainVersion = 20140811\r\nMainDescription = http://www.1111.org/updatades.txt\r\nMainFileList = http ://www.1111.org/updatalist.txt");  LPCTSTR lpszPath = _T("C:\\Users\\qyt\\Desktop\\Win32Project1\\updatalist.txt"); ------------------------- 这里可能会有问题。在开启unicode编码的模式下。 建议用_TCHAR*   错误二： 如果你打开了UNICODE模式，那么，写到文件里面的是unicode编码的字符，那么unicode编码的文件，要求最开始两个字节是（0xff，0xfe，UTF16），所以如果直接写的是unicode码的数据，而文件最开始两个字节又不是这两个，那么看起来就会是乱码，或者不对。 解决办法是： sizeof(_TCHAR)，如果是2，则就是unicode码的那么在文件最开始写上那两个字节。如果是1，那么就不用写那两个字节。