最近从移动硬盘拷贝一些文件到新的计算机上,经常出现了“文件夹或文件名过长”而无法拷贝的情况,现写了一个小程序来进行测试文件名。代码如下,可在VC或者C中编译运行,注意,要测试的文件夹(或磁盘)不能与该文件名在同一个文件夹下。
另外,下面的代码还可以进行修改,
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <dos.h>
#include <windows.h>
void main()
{
char linechar[1000];
char filepath[1000];
char doscom[1000]="cmd.exe /c dir /b/s";
char filename[50]="fileresults.txt";
FILE * fileopen;
int i,count;
long oldsize=0,newsize=1;
int maxchars=0;
printf("n 请输入要检查的盘符或者目录:");
scanf("%s",&filepath);
strcat(doscom," "); //增加一个空格。
strcat(doscom,filepath);
strcat(doscom," >");
strcat(doscom,filename);
puts(doscom);
WinExec(doscom,SW_HIDE);
// WinExec("cmd.exe /c dir /b/s H: >results.txt",SW_HIDE);
printf("n 现在进行分析:n");
/*
if( (fileopen = fopen(filename, "r" )) == NULL )
printf( "The file 'filename.txt' was not openedn" );
else
printf( " The file 'filename.txt' was openedn" );// control list 0.txt.
*/
//在读取文件之前要事先判断文件是否已经写入完成。
while(newsize-oldsize)
{
//打开文件后判断文件大小是否仍然在增加即可。
fileopen = fopen(filename, "r" );
fseek( fileopen, 0L, SEEK_END );
oldsize = ftell( fileopen );
//延时2秒后再看看。
Sleep(2000);
fseek( fileopen, 0L, SEEK_END );
newsize = ftell( fileopen );
printf("n oldsize=%ld,newsize=%ld",oldsize,newsize);
fclose(fileopen);
}
///开始读取已经写好的文件。
if( (fileopen = fopen(filename, "r" )) == NULL )
printf( "The file 'filename.txt' was not openedn" );
else
printf( " The file 'filename.txt' was openedn" );// control list 0.txt.
i=0;
while (!feof(fileopen))
{
i++;
fgets(linechar, sizeof(linechar), fileopen);//每行最多读取500个字符。
count=0;
for(count=0;linechar[count]!='n';count++)
;
if(count>=300)
{
printf("n 第 %d 行字符数超过300,为%d!n",i,count+1);
if(maxchars<=count)
{
maxchars=count;
}
}
}
//
printf("n 这个磁盘中文件路径的最大值为:%d",maxchars);
}
https://blog.sciencenet.cn/blog-72645-582716.html
上一篇:
感受行政人员的服务!下一篇:
预祝中国“女神”能够上天入地!