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

Тема в разделе "C/C++/C#", создана пользователем Антон12344, 15 май 2013.

  1. Антон12344

    Антон12344 New Member

    Регистрация:
    15 май 2013
    Сообщения:
    1
    Симпатии:
    0
    Написать программу, аналогичную команде 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++):
     

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

Поделиться этой страницей