Advertisement
Guest User

Исправленный OpenFile

a guest
Aug 29th, 2015
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.99 KB | None | 0 0
  1. void OpenFile()
  2. {
  3.   unsigned int FileNameSize = GetWindowTextLength(Controls[ID_EDIT_FILE_INPUT]);
  4.   if (FileNameSize == 0)
  5.     return;
  6.   FileNameSize ++;
  7.   char *FileName = new char[FileNameSize ];//это же имя файла, так?
  8.   GetWindowText(Controls[ID_EDIT_FILE_INPUT], FileName, FileNameSize);
  9.   FILE *File;
  10.   if (fopen_s(&File, FileName, "rt") != 0)
  11.   {
  12.     MessageBox(Form, "Не удалось открыть файл", "Ошибка", MB_OK | MB_ICONERROR);
  13.     return;
  14.   }
  15.   delete Text;
  16.   int FileSize = 0;
  17.   while (!feof(File))
  18.   {
  19.     char chr; //переменные надо объявлять в самой узкой области видимости из возможных
  20.     fread_s(&chr, sizeof(char),sizeof(char), 1, File);
  21.     if (('0' <= chr && chr <= '9' ) || chr=='\0' || chr=='\r' || chr=='\n')//правда, так условие красивее выглядит?
  22.     //if( strchr("0123456789\r\n", chr) == NULL || chr == '\0' ) //а так можно еще красивее
  23.     {
  24.       FileSize++;
  25.     }
  26.     else
  27.     {
  28.       MessageBox(Form, "В файле найдены неподходящие символы", "Ошибка", MB_OK | MB_ICONERROR);
  29.       fclose(File);
  30.       return;
  31.     }
  32.   }
  33.   rewind(File);
  34.   char *Text = new char[FileSize + 1]; //место под '\0' в конце резервируем
  35.   int CharsRead = fread_s( Text, sizeof(char)*Size, sizeof(char), Size, File); //запоминаем количество реально прочитанных символов
  36.   //конечно, система не должна позволить изменить файл, пока он открыт, но почему бы не перестраховаться, если это ничего не стоит?
  37.   fclose(File);
  38.   Text[ CharsRead ] = '\0' ;//и вот только после этого строку можно считать действительно прочитанной
  39.   SetWindowText(Controls[ID_EDIT_INPUT], Text);
  40. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement