WinCE6.0 檔案系統問題

glchild514 2015-10-06 10:59:09
不知道有沒有人遇到這樣的問題
WinCE6.0

USB Disk or SD Card
格式化成FAT32

在\\Hard Disk\\ABC\\ABC-000\\ABCDEFG\\H0000_Date-2014-04-07_Time-15-46-%d.dat
%d 從 1~ 5000
建檔案大概到2000個左右數目
就會無法在這個目錄建立檔案
fopen失敗 , 回傳是ERROR_DISK_FULL
但是磁碟空間還有很多

或是把這個USB Disk or SD Card拿到PC上面
在這個目錄下 , 還是可以繼續建立檔案

如果說WinCE6.0有什麼檔案數目 還是什麼 Dir數目 限制
哪裡有說明

我實在是找不到 怎麼解決 或是 哪裡有說明什麼限制

Thanks.
...全文
174 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
glchild514 2015-10-14
  • 打赏
  • 举报
回复
問了微軟 叫我走付費服務 ,
公司不會讓我花錢的啦
I run a quick search that can’t find that issue in our database.
For following action, This will need to submit it to PFE/TAM case to check the root cause.
Please note that is pay service since that already go to extend service now.
glchild514 2015-10-14
  • 打赏
  • 举报
回复
找WinCE的code, 沒能找到問題點在哪裡

先記錄一下測試
相同目錄下count由1累加上去

sprintf(name,"\\Hard Disk\\HMI\\HMI-000\\History\\H0000_Date-2000-05-01_Time-15-46%d.had",count);
只能創建999筆檔案
第1000會創建失敗

sprintf(name,"\\Hard Disk\\HMI\\HMI-000\\History\\%d.had",count);
能創建很多筆6000筆以上沒問題,但是創建會越來越慢
我就先停止了

改附檔名也有用 , 但是相同副檔名相同目錄下只能各自有999筆
sprintf(name,"\\Hard Disk\\HMI\\HMI-000\\History\\H0000_Date-2000-05-01_Time-15-46%d.had",count);
sprintf(name,"\\Hard Disk\\HMI\\HMI-000\\History\\H0000_Date-2000-05-01_Time-15-46%d.dat",count);
所以2個副檔名各自999筆後,無法再創建

先使用
sprintf(name,"\\Hard Disk\\HMI\\HMI-000\\History\\%d.had",count);
創建再rename
sprintf(name,"\\Hard Disk\\HMI\\HMI-000\\History\\H0000_Date-2000-05-01_Time-15-46%d.had",count);
只能rename 999筆檔案
rename第1000會失敗

sprintf(name,"\\Temp\\H0000_Date-2000-05-01_Time-15-46%d.had",count);
\\Temp是在DRAM上
能創建很多筆檔案 , 不受限制

先在DRAM上創建
sprintf(name,"\\Temp\\H0000_Date-2000-05-01_Time-15-46%d.had",count);
copyfile到
sprintf(name,"\\Hard Disk\\HMI\\HMI-000\\History\\H0000_Date-2000-05-01_Time-15-46%d.had",count);
只能copy到999筆檔案
第1000會copy失敗

如果改變檔名最前面
sprintf(name,"\\Hard Disk\\HMI\\HMI-000\\History\\%dH0000_Date-2000-05-01_Time-15-46.had",count);
可以創建超過999筆 , 3500筆以上沒問題
但是2000以後慢慢的越來越慢
我就先停止了

如果改變檔名前面
sprintf(name,"\\Hard Disk\\HMI\\HMI-000\\History\\H0000_%dDate-2000-05-01_Time-15-46.had",count);
只能創建999筆檔案
第1000會創建失敗

如果改變檔名前面
sprintf(name,"\\Hard Disk\\HMI\\HMI-000\\History\\H%d0000_Date-2000-05-01_Time-15-46.had",count);
可以創建超過999筆 , 2200筆以上沒問題
但是2000以後慢慢的越來越慢
我就先停止了

如果改變檔名前面
sprintf(name,"\\Hard Disk\\HMI\\HMI-000\\History\\H000%d0_Date-2000-05-01_Time-15-46.had",count);
可以創建超過999筆
第1969筆會創建失敗

如果改變檔名前面
sprintf(name,"\\Hard Disk\\HMI\\HMI-000\\History\\H0000%d_Date-2000-05-01_Time-15-46.had",count);
可以創建超過999筆
第1072筆會創建失敗
91program 2015-10-13
  • 打赏
  • 举报
回复
引用 4 楼 accessysq 的回复:
我测试的格式包括两种PART_DOS32和PART_DOS32X13。


可能和文件系统有一定的关系吧。
glchild514 2015-10-13
  • 打赏
  • 举报
回复
可以貼一下你的測試程式的code嗎??

為什麼你可以阿

我是有發現如果是
sprintf(name,"\\Hard Disk\\HMI\\HMI-000\\History\\%d.had",count);
這樣的短檔名

可以到6000~以上

但是後面檔案數目多了 , 處理越來越慢 , 我就停止了

引用 3 楼 accessysq 的回复:
我之前也就测试了上千个,刚才特意测试了5000个,也没发现你们说的问题。
不过就是这种连续创建很多文件时间很不确定性,太久了,比如我创建500个,时间1500ms,甚至更短。1000个时就可能出现很大差异,短时4000ms左右,长时要接近3分钟。没弄明白时间为啥有这么大差异。只要创建文件一多就有可能出现,但是具体多少个就会并不清楚。
而且这种情况是从创建第一个文件开始就变慢的。

glchild514 2015-10-13
  • 打赏
  • 举报
回复
可以貼一下你的測試程式的code嗎??

為什麼你可以阿

我是有發現如果是
sprintf(name,"\\Hard Disk\\HMI\\HMI-000\\History\\%d.had",count);
這樣的短檔名

可以到6000~以上

但是後面檔案數目多了 , 處理越來越慢 , 我就停止了

  • 打赏
  • 举报
回复
文件一多,同步软件进入目录要等好久好久。。。。。。
  • 打赏
  • 举报
回复
我测试的格式包括两种PART_DOS32和PART_DOS32X13。
  • 打赏
  • 举报
回复
我之前也就测试了上千个,刚才特意测试了5000个,也没发现你们说的问题。
不过就是这种连续创建很多文件时间很不确定性,太久了,比如我创建500个,时间1500ms,甚至更短。1000个时就可能出现很大差异,短时4000ms左右,长时要接近3分钟。没弄明白时间为啥有这么大差异。只要创建文件一多就有可能出现,但是具体多少个就会并不清楚。
而且这种情况是从创建第一个文件开始就变慢的。
glchild514 2015-10-13
  • 打赏
  • 举报
回复
我是存在USB Disk
認真實驗後真的如版主說得如此

好想知道這段code在哪裡 , 為什麼會這樣呢
glchild514 2015-10-13
  • 打赏
  • 举报
回复
C:\WINCE600\PRIVATE\WINCEOS\COREOS\CORE\CORELIBC\CRTW32\STDIO\fopen.c

呼叫了CreateFileW

CreateFileW實作的函式在哪 , 找不到
  • 打赏
  • 举报
回复
这些值会影响结构体的大小,估计对驱动有影响吧
glchild514 2015-10-13
  • 打赏
  • 举报
回复
失敗耶
修改這些值 , 燒到機器上 , 開機不了 , 真是奇怪

C:\WINCE600\PUBLIC\COMMON\SDK\INC\storemgr.h

/* some basic constants */
#define DEVICENAMESIZE 8
#define STORENAMESIZE 32
#define FILESYSNAMESIZE 32
#define FORMATNAMESIZE 32
#define PARTITIONNAMESIZE 32
#define PROFILENAMESIZE 32
#define FOLDERNAMESIZE 32
#define VOLUMENAMESIZE 64
#define FSDDESCSIZE 32
  • 打赏
  • 举报
回复
这个名字改短确实是有个版本弄的,好几年了,当初打了补丁后导致我的程序出现BUG。
glchild514 2015-10-13
  • 打赏
  • 举报
回复
剛開始WinCE6.0沒灌補丁的時候

我是用
hkFile = OpenStore(L"NANDFLASH");

但是灌完2012補丁後
你會發現必須改為
hDevice = OpenStore(L"NANDFLA");

這就是
C:\WINCE600\PUBLIC\COMMON\SDK\INC\storemgr.h
這個搞的鬼
#define DEVICENAMESIZE 8
glchild514 2015-10-13
  • 打赏
  • 举报
回复
C:\WINCE600\PUBLIC\COMMON\SDK\INC\storemgr.h

我懷疑這裏有些關係 , 研究中

/* some basic constants */
#define DEVICENAMESIZE 8
#define STORENAMESIZE 32
#define FILESYSNAMESIZE 32
#define FORMATNAMESIZE 32
#define PARTITIONNAMESIZE 32
#define PROFILENAMESIZE 32
#define FOLDERNAMESIZE 32
#define VOLUMENAMESIZE 64
#define FSDDESCSIZE 32
  • 打赏
  • 举报
回复
论坛的问题真多,3天两头就出问题,搞什么飞机啊。

to glchild514:我用的是BZ的测试代码,就改了一下路径,分辨在nandflash和storage下测试。
文件一多速度很慢,但有时再测又很快,说不上规律。

to BZ:PART_DOS32就是FAT32,后面的差不多,但区别我不懂。因为eboot里面不让分区使用相同的格式,所以后面的我就改了一种格式。
91program 2015-10-08
  • 打赏
  • 举报
回复
这样的问题,已经遇到过,但没有什么好的解决方法。 见 BLOG: http://blog.csdn.net/91program/article/details/27994109 可以考虑变换文件名生成的格式,可避免这个问题。

19,500

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧