Помощь В Нахождении Ошибки В Программном Коде.

15.05.2013
1
0
#1
Написать программу, аналогичную команде dir операционной системы MS DOS , которая выводит на экран список файлов и папок из заданного каталога. Дополнить вывод статистической информацией: минимальный размер файла, максимальный размер файла, средний размер файла.

C++:
#include "stdafx.h"
#include"windows.h"
#include"conio.h"
#include<iostream>

struct FileInf
{
TCHAR fname[MAX_PATH];
double fsizeKb;
bool isDir;
bool isArchive;
bool isHidden;
bool isSystem;
bool isReadOnly;
int sum;
int a;

};


void printOneFile(FileInf aFile);
void sortArray(FileInf* arr, int nCount);

const TCHAR* mask = L"C:\\*.*";
int _tmain(int argc, _TCHAR* argv[])
{
WIN32_FIND_DATA FindFileData;
HANDLE hFind;

int nCount = 0;


hFind = FindFirstFile(mask, &FindFileData);
do
{
++nCount;
}while (FindNextFile(hFind, &FindFileData));
FindClose(hFind);

int i = 0;
FileInf *aFiles = new FileInf[nCount];

SetConsoleCP(1251);
SetConsoleOutputCP(1251);
setlocale(LC_ALL,"rus");
hFind = FindFirstFile(mask, &FindFileData);
do
{
_tcscpy(aFiles.fname, FindFileData.cFileName);
aFiles.fsizeKb=FindFileData.nFileSizeHigh/1024.0*(MAXDWORD+1) + FindFileData.nFileSizeLow/1024.0;


if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
aFiles.isDir=true;
else
aFiles.isDir=false;

if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE)
aFiles.isArchive=true;
else
aFiles.isArchive=false;

if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN)
aFiles.isHidden=true;
else
aFiles.isHidden=false;

if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM)
aFiles.isSystem=true;
else
aFiles.isSystem=false;

if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_READONLY)
aFiles.isReadOnly=true;
else
aFiles.isReadOnly=false;

++i;
}while (FindNextFile(hFind, &FindFileData));
FindClose(hFind);
char menu;
do
{
printf("1 - вывести на экран файлы\n 2 - вывод файлов с сортировкой\n 3 - Обработка\n 0 - закрыть программу\n");
menu=getch();
switch(menu)
{
case'1':
{
printf("Список папок и файлов папки: %S\n\n",mask);
for (i = 0; i < nCount; ++i)
{
printOneFile(aFiles);
if(i%25==0 && i!=0)
getchar();
}
printf("\nКонец списка");
getchar();

}break;
case'2':
{
sortArray(aFiles, nCount);
printf("\n\nПосле сортировки:\n");
for (i = 0; i < nCount; ++i)
{
printOneFile(aFiles);
if(i%25==0 && i!=0)
getchar();
}
printf("\nКонец списка");
getchar();

}break;

case'3':
int k, fsizeKb, max;
{


k=0;
for (int i=0; i<fsizeKb; i++)
{

if (k>max)
{
max=k;
}
}


printf("Максимальный размер файла: %f \n", max);

}break;
}
}while(menu!='0');
return 0;
}


void printOneFile(FileInf aFile)
{

printf("%-25S ", aFile.fname);
if(aFile.isDir)
printf(" ------- DIR ");
else
{
if(aFile.fsizeKb < 1024)
printf("%10.2f Kb ",aFile.fsizeKb);
if(aFile.fsizeKb >= 1024 && aFile.fsizeKb < 1024*1024)
printf("%10.2f Mb ",aFile.fsizeKb/1024);
if(aFile.fsizeKb >= 1024*1024 && aFile.fsizeKb < 1024*1024*1024)
printf("%10.2f Gb ",aFile.fsizeKb/1024/1024);
}

if(aFile.isArchive)
printf("A ");
if(aFile.isHidden)
printf("H ");
if(aFile.isSystem)
printf("S ");
if(aFile.isReadOnly)
printf("R");
printf("\n");
}


void sortArray(FileInf* arr, int nCount)
{
FileInf temp;

for (int i = 0; i < nCount; ++i)
for (int j = i; j < nCount; ++j)
{
if (_tccmp(arr.fname, arr[j].fname) > 0)
{
temp=arr;
arr=arr[j];
arr[j]=temp;
}
}

}
C++:

Программа работает нормально , но не выводит максимальный размер файла , причину найти не могу . Если кто то найдет ошибку пожалуйста отпишитесь . Зарание благодарен .