Консультация № 174621
28.11.2009, 13:01
0.00 руб.
0 3 1
Уважаемые эксперты,мне необходима ваша помощь в написании программы.
Задание. Перейти в заданный каталог.Вывести на стандартное устройство вывода (используя функцию CreateFile) следующую информацию о файлах этого каталога:время создания, время последнего доступа, размеры файлов.Создать собственный каталог.В этом каталоге создать файл, в который записать первое и последнее слова из самого длинного файла и самого короткого файла заданного каталога с указанием имени и размера файла, содержащего эти слова.

Среда разработки-Borland C++ Builder.

Я попытался написать программу и остановился с записью необходимых слов в созданный файл. Исходный код предоставляю, может там еще обнаружатся ошибки.

Приложение:
#include <vcl.h>
#include <clx.h>
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <wchar.h>
#include <mbstring.h>
#include <iostream.h>
#include <stdlib.h>
#pragma hdrstop
#pragma argsused
int main(int argc, char* argv[])
{HANDLE FFF,hOut,hMax,hMin;
WIN32_FIND_DATA InfoFile;
SYSTEMTIME sysTime;
FILETIME fileTime;
const int MaxLenDir=200;
char cNewDir[MaxLenDir],cDir[MaxLenDir],fileout[MaxLenDir];
char maxname[250],minname[250];
DWORD maxlen,minlen;
//поиск в текущей дерриктории
//поиск самого длинного и короткого файла
printf("Write directory:\n");
scanf("%s",&cDir);
SetCurrentDirectory(cDir);
FFF=FindFirstFile("*.txt", &InfoFile);
maxlen=InfoFile.nFileSizeLow;
minlen=InfoFile.nFileSizeLow;
strcpy(maxname,InfoFile.cFileName);
strcpy(minname,InfoFile.cFileName);
FileTimeToLocalFileTime(&InfoFile.ftCreationTime,&fileTime);
FileTimeToSystemTime(&fileTime,&sysTime);
printf("\nFindedFiles:\n%s",InfoFile.cFileName);
printf("\nCreation time:%d.%d.%d \n",InfoFile.ftCreationTime,InfoFile.ftLastAccessTime,InfoFile.nFileSizeLow);
while(FindNextFile(FFF,&InfoFile))
{
FileTimeToLocalFileTime(&InfoFile.ftCreationTime,&fileTime);
FileTimeToSystemTime(&fileTime,&sysTime);
printf("\n%s",InfoFile.cFileName);
printf("\nCreation time:%d.%d.%d \n",InfoFile.ftCreationTime,InfoFile.ftLastAccessTime,InfoFile.nFileSizeLow);
if(maxlen<InfoFile.nFileSizeLow){maxlen=InfoFile.nFileSizeLow;strcpy(maxname,InfoFile.cFileName);}
if(minlen>InfoFile.nFileSizeLow){minlen=InfoFile.nFileSizeLow;strcpy(minname,InfoFile.cFileName);}
}
FindClose(FFF) ;
printf("\n maxname=%s",maxname);
printf("\n minname=%s",minname);
getch();
//открытие самого и самого маленького файла
hMax=CreateFile(maxname,GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL);
if(hMax==INVALID_HANDLE_VALUE){printf("no open maxfile");}
hMin=CreateFile(minname,GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL);
if(hMin==INVALID_HANDLE_VALUE){printf("no open minfile");}
//создание собственного каталога и файла в нем
printf("\nWrite name new directory:\n");
scanf("%s",&cNewDir);
if(CreateDirectory(cNewDir,NULL)==TRUE)
printf("Directory have been create");
else {printf("Directory haven't been create");
}
getch();
SetCurrentDirectory(cNewDir);
printf("\nVvedite nazvanie faila v formate *.txt: \n");
scanf("%s",&fileout);
hOut=CreateFile(fileout,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if(hOut==INVALID_HANDLE_VALUE){printf("File haven'n been create");}
else {printf("File sozdan");}
getch();

}

Обсуждение

Неизвестный
28.11.2009, 15:15
общий
это ответ
Здравствуйте, Jekaiseburga!
Для поиска первого слова переведите указатель в файле (
DWORD SetFilePointer(
HANDLE hFile, // handle to file
LONG lDistanceToMove, // bytes to move pointer
PLONG lpDistanceToMoveHigh, // bytes to move pointer
DWORD dwMoveMethod // starting point
);
)в начало файла (dwMoveMethod==FILE_BEGIN) и считывайте слева направо последовательность до первого пробела.
Чтобы считать посленее слово используйте dwMoveMethod==FILE_END и считывайте последовательность до первого пробела слева направо.
Удачи!

Неизвестный
28.11.2009, 17:55
общий
Я не силен в программировании.Подскажите как считать эту последовательность символов до первого пробела(возможно создать цикл).я даже не представляю как это все организовать.
Неизвестный
29.11.2009, 11:14
общий
В вашем случае придется делать цикл с использованием
ReadFile и SetFilePointer. Но если использовать отображение
файлов на память можно использовать strchr и strrchr для
поиска очередного пробела слева-направо и справа-налево
соответственно.
Удачи!
Форма ответа