Показать полную графическую версию : Открытие текстового файла
.::.DIMA.::.
03-05-2009, 02:43
Решено
.::.DIMA.::. возможно всё дело в распространенности MFC.
... кое-где MFC называют вымирающим динозавром ... >> (http://forum.oszone.net/post-617877.html#post617877)
Без привязки к MFC - fscanf можно использовать например так
#include <stdio.h>
int main(int argc, char* argv[])
{
char bykva[]={'A','\0'};
int chislo1,chislo2;
FILE *My;
/* My=fopen("MyFile.txt","w");
chislo1=1;
chislo2=2;
fprintf(My,"%s %i %i",bykva,chislo1,chislo2);
fclose(My);*/
My=fopen("MyFile.txt","r");
fscanf(My,"%s %i %i",bykva,&chislo1,&chislo2);
fclose(My);
printf("%s %i %i",bykva,chislo1,chislo2);
return 0;
}
В файле через пробел должна следовать буква и два числа, для демонстрации (автоматического создания файла) можно раскомментировать часть кода, отвечающую за запись в файл.
.::.DIMA.::. можно посмотреть в сторону Win Api
Вместо fopen, fscanf, fclose можно использовать соответственно _lopen, _lread, _lclose.
Но это устаревшие функции, вместо них лучше использовать - CreateFile, ReadFile, CloseHandle.
Win32 File Sample (http://www.codersource.net/win32_file_sample.html)
Кстати по ссылке в выводе как раз рекомендуют забыть про эти функции и работать с MFC вариантом - классом CFile или CStdioFile :)
.::.DIMA.::. возможно всё дело в распространенности MFC.
Цитата hasherfrog:
... кое-где MFC называют вымирающим динозавром ... >> »
Кое-где я стандартную сишную библиотеку (с функциями fprintf, fscanf) считаю динозавром
Для работы с текстовыми файлами полно библиотек, и ничто не мешает пользоваться ими одновременно. И одновременно с MFC. Пример:
// не забудь #include <fstream>
// помни, что если не используешь using namespace std, то надо явно указывать пространство имён
void Button1_OnClick()
{
char char1;
int int1, int2;
std::ifstream in("input.txt");
if (!(in >> char1 >> int1 >> int2).good()) MyError("Ошибка чтения данных input.txt");
...
}
Если ругается что нет файла fstream - скопируй откуда-нибудь стандартную библиотеку c++
Если ругается на что-то внутри библиотеки - значит сделай #define C_PLUS_PLUS или MICROSOFT_ или что-то там ещё, посмотри внутри библиотечных файлов. Если не поможет - значит компилятор урезанный.
char s[50];
while (! feof (f))
{
s[0] = 0; // не забываем инициализировать
AfxMessageBox (CString (fgets (s, sizeof(s), f)));
};
Syntax
#include <stdio.h>
char *fgets(char *s, int n, FILE *stream);
wchar_t *fgetws(wchar_t *s, int n, FILE *stream); // Unicode version
Description
Gets a string from a stream.
fgets reads characters from stream into the string s. The function stops reading when it reads either n - 1 characters or a newline character whichever comes first. fgets retains the newline character at the end of s. A null byte is appended to s to mark the end of the string.
Return Value
On success fgets returns the string pointed to by s; it returns NULL on end-of-file or error.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.