Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Название темы: Сортировка в файле
Показать сообщение отдельно

Ветеран


Сообщения: 1404
Благодарности: 135

Профиль | Отправить PM | Цитировать


Я хочу открыть файл и считать все содержимое
1. как это сделать построчно, используя WinAPI?
2. как это сделать считав весь файл сразу в какую-то переменную, используя WinAPI?

Код: Выделить весь код
void main()
{
	strng d="log.txt";
	HANDLE hFile;
	strng t;
	DWORD cbreading;
	
	DWORD fzi;
	
	LPDWORD dwSizeHigh;
	if (hFile=CreateFile(d, 
		GENERIC_READ,  
		FILE_SHARE_READ,  
		NULL,  
		OPEN_ALWAYS,  
		FILE_ATTRIBUTE_NORMAL,  
		NULL))
	{


		fzi = GetFileSize(hFile, NULL);
		printf("%d", fzi); //OK - 304
		ReadFile(hFile,&t,fzi,&cbreading,NULL);	// как организовать цикл считывающий построчно?		
		printf("%s",&t);	 //глюк. если выше написать ReadFile(hFile,&t,100,&cbreading,NULL); то все ОК. Почему?
	
		CloseHandle(hFile);
	}
}
******Добавлено:

Ошибка была в том, что строка не инициализирована.
В общем файл читается полностью так.

Код: Выделить весь код
#include <windows.h>
#include <stdio.h>

#define Msg(x) MessageBox(0,x,"program",MB_OK)

typedef char* strng;

strng create_string();
strng create_string(int sz);
void delete_string(strng m);
void print_string(strng t);
void terminate_string(strng m, int sz);

strng create_string(int sz)
{
	strng m;
	m = new char[sz+1];
	terminate_string(m, sz+1);
	return (m);
}

void delete_string(strng m)
{
	delete[] m;
}


void print_string(strng t)
{
	int i;
	for (i=0;t[i]!='\0';i++)
	{
		printf("%C",t[i]);
	}
	printf("\n");
}

void terminate_string(strng m, int sz)
{
	m[sz-1]='\0';
}


void main()
{
	strng d="log.txt";
	strng e="log1.txt";
	HANDLE hFile, hCopy;
	strng t;
	DWORD cbreading;	
	DWORD fzi;	
	BOOL bResult;

	if (hFile=CreateFile(d, 
		GENERIC_READ,  
		FILE_SHARE_READ,  
		NULL,  
		OPEN_ALWAYS,  
		FILE_ATTRIBUTE_NORMAL,  
		NULL))
	{
		fzi = GetFileSize(hFile, NULL);		
		t=create_string(fzi);
		bResult = ReadFile(hFile, t, fzi, &cbreading, NULL);
		if(!bResult) {
			
			Msg("Невозможно прочитать файл!");
		}
		else
		{
			hCopy=CreateFile(e,
				GENERIC_WRITE, 
				FILE_SHARE_WRITE,                    
				NULL, 
				CREATE_ALWAYS, 
				NULL, 
				NULL);
			WriteFile(hCopy, t, fzi, &cbreading, NULL);    
			CloseHandle(hCopy);
		}
		print_string(t);
		delete_string(t);
		CloseHandle(hFile);
	}
}

-------
Ehhh.. what's up, doc?..


Последний раз редактировалось mrcnn, 09-07-2008 в 14:30.


Отправлено: 13:51, 09-07-2008 | #2

Название темы: Сортировка в файле