Wince5.0在存储卡上写文件失败?

王小龙   2009-8-20 16:37 楼主
   现在有一个基于WINCE5.0的GPS设备,想在他的存储卡上写一个临时文件保存信息
   开发环境是VS2005和开发板导出的SDK

   代码如下
  

  1. void WriteFileEx()
  2. {
  3.          HANDLE fHandle;
  4.         fHandle = ::CreateFile(L"SMMC\\DSA\\2.txt",GENERIC_WRITE,0,NULL,OPEN_ALWAYS  ,FILE_ATTRIBUTE_NORMAL,0);
  5.         if(fHandle == INVALID_HANDLE_VALUE)
  6.         {
  7.                 ::MessageBox(NULL,L"File Open Failed",L"Message",MB_OK);
  8.                 return;
  9.         }
  10.        
  11.         wchar_t *buffer = L"this is test\n";
  12.         DWORD writtenSize = 0;
  13.         BOOL bRet = ::WriteFile(fHandle,buffer,wcslen(buffer),&writtenSize,NULL);
  14.         if(bRet)
  15.         {
  16.                 //OutputDebugString(_T("WriteFile 写文件成功\r\n"));
  17.                 ::MessageBox(NULL,L"Written",L"Message",MB_OK);
  18.         }
  19.         ::CloseHandle(fHandle);
  20. }
  21.    

    这段代码在CREATEFILE的时候就失败了
   
    麻烦大家帮我看一下到底是什么问题,是否是存储卡的路径错了?由于是已经制作好的机器,里面什么信息都看不到,第一次写WINCE程序,没什么经验,麻烦大家帮帮忙。

回复评论 (17)

2.txt文件是否存在?
点赞  2009-8-20 16:41
  用了OPEN_ALWAYS,文件不存在不是也会新建一个的吗
点赞  2009-8-20 16:44
     E。。。大家帮帮忙呀。。刚开始做WINCE就碰到这种问题,太受打击了。。
点赞  2009-8-20 16:56
哈, 才這樣就受到打擊了啊, 放心, 路還長的很呢

L"SMMC\\DSA\\2.txt" 改為
L"\\SMMC\\DSA\\2.txt"

試試看吧

不過路徑若是不在, CreateFile 不知會不會 Create Folder?? 試試看吧, 祝好運

Paul, Chao @ Techware
点赞  2009-8-20 17:00
引用: 引用 4 楼 paul_chao 的回复:
哈, 才這樣就受到打擊了啊, 放心, 路還長的很呢

L"SMMC\\DSA\\2.txt" 改為
L"\\SMMC\\DSA\\2.txt"

試試看吧

不過路徑若是不在, CreateFile 不知會不會 Create Folder?? 試試看吧, 祝好運

Paul, Chao @ Techware


路径是存在的,我弹出了当前启动的EXE的完整路径,你说的\\SMMC\\DSA\\2.txt这个我也试过了,还是不行。
文件读写在编程方面是最基本的啊。现在连这个都做不了。。怎么能不受打击。
还是谢谢回复
点赞  2009-8-20 17:06
关注结果。
点赞  2009-8-20 17:10
用 GetLastError 去抓抓看

  1.      HANDLE fHandle;
  2.     fHandle = ::CreateFile(L"SMMC\\DSA\\2.txt",GENERIC_WRITE,0,NULL,OPEN_ALWAYS  ,FILE_ATTRIBUTE_NORMAL,0);
  3.     if(fHandle == INVALID_HANDLE_VALUE)
  4.     {
  5.         TCHAR szStr[256];
  6.         wsprintf(szStr, L"File Open Failed(%d)", GetLastError());
  7.         ::MessageBox(NULL,szStr,L"Message",MB_OK);
  8.         return;
  9.     }


大家再來參詳參詳吧

Paul, Chao @ Techware

点赞  2009-8-20 17:18
    写入的问题已解决,可是写出来的文件,和实际写入的内容不一样,
    代码里面是THIS IS TEST,写入之后的文件变成了T H I S  I S,内容不完全而且还多出了空格,
宽字符写入有什么需要注意的吗?
点赞  2009-8-20 17:20
引用: 引用 7 楼 paul_chao 的回复:
用 ? GetLastError ? 去抓抓看

  1. ? ? ? ? ? HANDLE ? fHandle;
  2. ? ? ? ? fHandle ? = ? ::CreateFile(L "SMMC\\DSA\\2.txt ",GENERIC_WRITE,0,NULL,OPEN_ALWAYS ? ? ,FILE_ATTRIBUTE_NORMAL,0);
  3. ? ? ? ? if(fHandle ? == ? INVALID_HANDLE_VALUE)
  4. ? ? ? ? {
  5. ? ? ? ? ? ? ? ? TCHAR ? szStr[256];
  6. ? ? ? ? ? ? ? ? wsprintf(szStr, ? L "File ? Open ? Failed(%d) ", ? GetLastError());
  7. ? ? ? ? ? ? ? ? ::MessageBox(NULL,szStr,L "Message ",MB_OK);
  8. ? ? ? ? ? ? ? ? return;
  9. ? ? ? ? }


大家再來參詳參詳吧

Paul, ? Chao ? @ ? Techware


其实是一个很2的问题我都不好意思说……
点赞  2009-8-20 17:21
::WriteFile(fHandle,buffer,wcslen(buffer),&writtenSize,NULL);
change to
::WriteFile(fHandle,buffer,wcslen(buffer)*sizeof(TCHAR),&writtenSize,NULL);

多空格, 應該不會, 請 LZ 把 ReadFile 的 code 一併貼出來吧

Paul, Chao @ Techware
点赞  2009-8-20 17:23
  我是直接USB连上设备,记事本打开的,我试一下你上面的方法
点赞  2009-8-20 17:25
更正, 應為
::WriteFile(fHandle,buffer,(wcslen(buffer)+1)*sizeof(TCHAR),&writtenSize,NULL);

Paul, Chao @ Techware
点赞  2009-8-20 17:25
引用: 引用 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)就对了,谢谢!
点赞  2009-8-20 17:27
为什么还要加1?
点赞  2009-8-20 17:28
引用: 引用 13 楼 mylovefan 的回复:

从C#转到C++来果然是项艰苦的工程
加上*sizeof(TCHAR)就对了,谢谢!


果然年代有差, 有代溝了 ^_^y

引用: 引用 14 楼 mylovefan 的回复:

为什么还要加1?


最後一個結尾 '\0'

Paul, Chao @ Techware
点赞  2009-8-20 17:32
   我知道\0,但是貌似加和不加没有什么区别啊。必须加1么
点赞  2009-8-20 17:37
  非常感谢paul_chao!
点赞  2009-8-20 17:52
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复