Advertisement
fabis_sparks

my implementation of cat

Feb 16th, 2017
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.17 KB | None | 0 0
  1. // cat.cpp: определяет точку входа для консольного приложения.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <iostream>
  6. #include <conio.h>
  7. #include <cstdlib>
  8. #include <fstream>
  9. #include <iomanip>
  10. //define errors
  11. #define no_such_file "No such file"
  12. #define too_many_args "Too many arguments"
  13. #define not_enough_args "Not enough arguments"
  14. //
  15. const int string_size = 256; // Размер одной строки
  16. FILE *f;
  17. void file_check(char *); // Функция проверки файла
  18. void help(); // Вывод помощи
  19. void args_check(int); // Проверка кол-ва аргументов
  20. void file_read(char *); // Чтение файла
  21.  
  22.  
  23. int main(int argc, char* argv[])
  24. {
  25.     args_check(argc); // Передаём в функцию кол-во аргументов для проверки
  26.     char *filename = argv[1]; // Ассоциируем переменную с названием введенного файла
  27.     file_check(filename); // Передадим название файла в функцию для проверки на существование
  28.     file_read(filename); // Прочитаем файл, передав название в функцию
  29.     return 0;
  30. }
  31.  
  32. void help() {
  33.     std::cout << std::endl << "***** Help Box ******";
  34.     std::cout << std::endl << "cat - concatenate files and print on the standard output.";
  35.     std::cout << std::endl << "You should enter filename after *cat*.";
  36.     std::cout << std::endl << "For example:";
  37.     std::cout << std::endl << "cat file.txt";
  38.     std::cout << std::endl << "*********************";
  39. }
  40.  
  41. void args_check(int argc) {
  42.     // Если аргументов слишком мало или много, то выводим нужное сообщение, хелп-бокс и аварийно завершим программу
  43.     if (argc < 2) { std::cout << std::endl << not_enough_args; help(); exit(1); }
  44.     else if (argc > 2) { std::cout << std::endl << too_many_args; help(); exit(1); }
  45.  
  46. }
  47.  
  48. void file_check(char *filename) {
  49.    
  50.     //std::cout << std::endl << filename; Проверка на ввод имени файла. Не нужна в релиз-версии
  51.     FILE *f = fopen(filename, "r"); // Откроем файл для чтения
  52.             // Проверим существование файла.
  53.     if (f == NULL) { // Если файла нет - выведем сообщение об этом и аварийно завершим программу
  54.         system("cls");
  55.         std::cout << no_such_file << ": " << filename << std::endl;
  56.         system("pause");
  57.         exit(1);
  58.     }
  59.     else { fclose(f); } // Если файл открылся, то просто закроем его.
  60. }
  61.  
  62. void file_read(char *filename) {
  63.    
  64.     char output[string_size] = { "" };
  65.     std::ifstream in1(filename); //Открыли файл для чтения
  66.     while (!in1.eof()) //Читаем информацию, пока не конец файла
  67.     {
  68.         in1.getline(output, string_size); //построчно считаем информацию
  69.         std::cout << output << std::endl; //вывод считанных строк на экран
  70.     }
  71.     in1.close();  //Закрыли открытый файл
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement