现在有一个基于WINCE5.0的GPS设备,想在他的存储卡上写一个临时文件保存信息
开发环境是VS2005和开发板导出的SDK
代码如下
- void WriteFileEx()
- {
- HANDLE fHandle;
- fHandle = ::CreateFile(L"SMMC\\DSA\\2.txt",GENERIC_WRITE,0,NULL,OPEN_ALWAYS ,FILE_ATTRIBUTE_NORMAL,0);
- if(fHandle == INVALID_HANDLE_VALUE)
- {
- ::MessageBox(NULL,L"File Open Failed",L"Message",MB_OK);
- return;
- }
-
- wchar_t *buffer = L"this is test\n";
- DWORD writtenSize = 0;
- BOOL bRet = ::WriteFile(fHandle,buffer,wcslen(buffer),&writtenSize,NULL);
- if(bRet)
- {
- //OutputDebugString(_T("WriteFile 写文件成功\r\n"));
- ::MessageBox(NULL,L"Written",L"Message",MB_OK);
- }
- ::CloseHandle(fHandle);
- }
-
这段代码在CREATEFILE的时候就失败了
麻烦大家帮我看一下到底是什么问题,是否是存储卡的路径错了?由于是已经制作好的机器,里面什么信息都看不到,第一次写WINCE程序,没什么经验,麻烦大家帮帮忙。
用了OPEN_ALWAYS,文件不存在不是也会新建一个的吗
E。。。大家帮帮忙呀。。刚开始做WINCE就碰到这种问题,太受打击了。。
哈, 才這樣就受到打擊了啊, 放心, 路還長的很呢
L"SMMC\\DSA\\2.txt" 改為
L"\\SMMC\\DSA\\2.txt"
試試看吧
不過路徑若是不在, CreateFile 不知會不會 Create Folder?? 試試看吧, 祝好運
Paul, Chao @ Techware
引用: 引用 4 楼 paul_chao 的回复:
哈, 才這樣就受到打擊了啊, 放心, 路還長的很呢
L"SMMC\\DSA\\2.txt" 改為
L"\\SMMC\\DSA\\2.txt"
試試看吧
不過路徑若是不在, CreateFile 不知會不會 Create Folder?? 試試看吧, 祝好運
Paul, Chao @ Techware
路径是存在的,我弹出了当前启动的EXE的完整路径,你说的\\SMMC\\DSA\\2.txt这个我也试过了,还是不行。
文件读写在编程方面是最基本的啊。现在连这个都做不了。。怎么能不受打击。
还是谢谢回复
用 GetLastError 去抓抓看
- HANDLE fHandle;
- fHandle = ::CreateFile(L"SMMC\\DSA\\2.txt",GENERIC_WRITE,0,NULL,OPEN_ALWAYS ,FILE_ATTRIBUTE_NORMAL,0);
- if(fHandle == INVALID_HANDLE_VALUE)
- {
- TCHAR szStr[256];
- wsprintf(szStr, L"File Open Failed(%d)", GetLastError());
- ::MessageBox(NULL,szStr,L"Message",MB_OK);
- return;
- }
大家再來參詳參詳吧
Paul, Chao @ Techware
写入的问题已解决,可是写出来的文件,和实际写入的内容不一样,
代码里面是THIS IS TEST,写入之后的文件变成了T H I S I S,内容不完全而且还多出了空格,
宽字符写入有什么需要注意的吗?
引用: 引用 7 楼 paul_chao 的回复:
用 ? GetLastError ? 去抓抓看
- ? ? ? ? ? HANDLE ? fHandle;
- ? ? ? ? fHandle ? = ? ::CreateFile(L "SMMC\\DSA\\2.txt ",GENERIC_WRITE,0,NULL,OPEN_ALWAYS ? ? ,FILE_ATTRIBUTE_NORMAL,0);
- ? ? ? ? if(fHandle ? == ? INVALID_HANDLE_VALUE)
- ? ? ? ? {
- ? ? ? ? ? ? ? ? TCHAR ? szStr[256];
- ? ? ? ? ? ? ? ? wsprintf(szStr, ? L "File ? Open ? Failed(%d) ", ? GetLastError());
- ? ? ? ? ? ? ? ? ::MessageBox(NULL,szStr,L "Message ",MB_OK);
- ? ? ? ? ? ? ? ? return;
- ? ? ? ? }
大家再來參詳參詳吧
Paul, ? Chao ? @ ? Techware
其实是一个很2的问题我都不好意思说……
::WriteFile(fHandle,buffer,wcslen(buffer),&writtenSize,NULL);
change to
::WriteFile(fHandle,buffer,wcslen(buffer)*sizeof(TCHAR),&writtenSize,NULL);
多空格, 應該不會, 請 LZ 把 ReadFile 的 code 一併貼出來吧
Paul, Chao @ Techware
我是直接USB连上设备,记事本打开的,我试一下你上面的方法
更正, 應為
::WriteFile(fHandle,buffer,(wcslen(buffer)+1)*sizeof(TCHAR),&writtenSize,NULL);
Paul, Chao @ Techware
引用: 引用 10 楼 paul_chao 的回复:
::WriteFile(fHandle,buffer,wcslen(buffer),&writtenSize,NULL);
change to
::WriteFile(fHandle,buffer,wcslen(buffer)*sizeof(TCHAR),&writtenSize,NULL);
多空格, 應該不會, 請 LZ 把 ReadFile 的 code 一併貼出來吧
Paul, Chao @ Techware
从C#转到C++来果然是项艰苦的工程
加上*sizeof(TCHAR)就对了,谢谢!
引用: 引用 13 楼 mylovefan 的回复:
从C#转到C++来果然是项艰苦的工程
加上*sizeof(TCHAR)就对了,谢谢!
果然年代有差, 有代溝了 ^_^y
引用: 引用 14 楼 mylovefan 的回复:
为什么还要加1?
最後一個結尾 '\0'
Paul, Chao @ Techware
我知道\0,但是貌似加和不加没有什么区别啊。必须加1么