Необходимость написания этой простенькой программы возникла еще примерно в 1990 году, даже раньше. Задача была очень простая: при необходимости быстро и просто (программно) создавать новый пустой файл для последующей работы с ним.
Дело в том, что задача создания пустого файла с заданным именем в отрыве от какого-то приложения для работы с файлами хоть и не стоит столь остро, практически не решена ни в одной консольной оболочке DOS-Windows систем. Даже в файловом менеджере Far существует, как и везде, команда создания новой папки, но команды создания нового файла нет. (Функция создания новых пустых файлов из контекстного меню появилась только в проводнике Windows, да и то не сразу.)
Тогда же, в 1990 году наряду с многими мелкими утилитами (например, была создана утилита надежного стирания файлов с гарантированным уничтожением информации, существенно превосходившая по качеству удаления и скорости работы Nurton Utilities) была написана и эта простенькая программа. Написана она была на языке C с использованием популярной тогда IDE от фирмы Borland Turbo С 2.0 под операционную систему MS DOS. Вот её исходный текст:
#include <stdio.h>
FILE *f1;
int main(int narg, char *arg[])
{
if(narg<2)
{
printf("Need filename!\r\nCommand line format: CF.COM <filename>\r\n");
return 1;
}
if((f1=fopen(arg[1],"r"))!=NULL)
{
fclose(f1);
printf("The file %s is allredy exists!\r\n",arg[1]);
return 1;
}
if((f1=fopen(arg[1],"wa"))==NULL)
{
printf("Cannot create file %s\r\n",arg[1]);
return 1;
}
fclose(f1);
return 0;
}
Вплоть до настоящего времени она использовалась практически без изменений, за исключением того, что затем была переписана под MS Windows для 32-х, а затем и 64-х разрядных версий. Не так давно в качестве учебного примера мы переписали её под IDE Pelles C, очень удобную и легкую IDE для программирования на языке C.
#include <stdio.h>
FILE *f1;
int main(int narg, char *arg[])
{
char cr[] = "Creating File utility (c) 1992-2021 DAE'S Software\r\n";
char pk[] = "\r\nPress any key to continue...";
if(narg<2)
{
printf("%sNeed filename for creation!\r\nCommand line format: CF.EXE <filename>%s",cr,pk);
getchar();
return 1;
}
if((f1=fopen(arg[1],"r"))!=NULL)
{
fclose(f1);
printf("%sThe file %s is already exists!%s",cr,arg[1],pk);
getchar();
return 1;
}
if((f1=fopen(arg[1],"a"))==NULL)
{
fclose(f1);
printf("%sCannot create file %s%s",cr,arg[1],pk);
getchar();
return 1;
}
fclose(f1);
return 0;
}
Как видно из текста, функционально программа за это время никак не изменилась, добавились лишь некоторые «украшения».
Когда мы начали использовать для обучения детей MS Small Basic, в какой-то момент появилась мысль реализовать эту простую, и в то же время полезную с точки зрения понимания функций работы с файлами программу на языке Small Basic, что мы и сделали.
Кроме того, мы изменили в программе режим работы по умолчанию: теперь при вызове программы без параметров она обязательно создает текстовый файл с именем «newN.txt», где N — целое число 0, 1 и т.п. (в зависимости от того, какое имя файла на данный момент «свободно»). Таким образом, запустив программу в консоли несколько раз (несколько раз нажав на клавиатуре три клавиши: «C»,»F» и «Enter») мы получим несколько новых пустых файлов с расширением «txt» и последовательно пронумерованными именами. То же самое мы получим, запуская программу двойным кликом мышки из проводника Windows.
Эта версия программы имеет номер 2.
' Программа создания пустого файла с заданным именем из командной строки
Title = "Creating File utility v.2 (c) 1992-2021 DAE'S Software\r\n" ' название программы
Fname = "" ' имя файла
n = 0 ' счетчик для имени файла
if Program.ArgumentCount < 1 Then ' если в командной строке не указано имя файла
' Старое поведение - работа без умолчания ***
'TextWindow.WriteLine(Title) ' выводим название
'TextWindow.WriteLine("") ' пропускаем строку
'TextWindow.WriteLine("Need filename for creation!") ' пишем, что нужно имя файла
'TextWindow.WriteLine("Command line format: CF.EXE <filename>") '
'TextWindow.Pause() ' предлагаем нажать клавишу для завершения
'Program.End() ' завершаем программу
' создаем имя файла "по умолчанию"
While LDFile.Exists("new" + n + ".txt") ' ищем "свободное" имя файла
n = n + 1 ' увеличиваем до тех пор, пока не встретим "свободное" имя файла
EndWhile
Fname = "new" + n + ".txt" ' создаем подошедшее имя файла "по умолчанию"
Else
Fname = Program.GetArgument(1) ' иначе - берём то, что указано вкомандной строке
EndIf
If LDFile.Exists(Fname) Then ' если файл с указанным именем уже существует
TextWindow.WriteLine(Title) ' выводим название
TextWindow.WriteLine("") ' пропускаем строку
TextWindow.WriteLine("The file " + Program.GetArgument(1) + " is already exists!") '
TextWindow.Pause() ' предлагаем нажать клавишу для завершения
Program.End() ' завершаем программу
EndIf
If File.WriteContents(Fname,"") = "FAILED" Then ' если файл с указанным именем не удается создать
TextWindow.WriteLine(Title) ' выводим название
TextWindow.WriteLine("") ' пропускаем строку
TextWindow.WriteLine("Cannot create file " + Program.GetArgument(1)) ' сообщаем об ошибке
TextWindow.Pause() ' предлагаем нажать клавишу для завершения
EndIf
Program.End() ' завершаем программу
Для упрощения кода мы воспользовались здесь функцией проверки существования файла по имени LDFile.Exists()
из библиотеки расширения LitDev.
Программу можно скомпилировать самим или скачать на нашем сайте по ссылкам (Версия 1 и Версия 2) или на странице Ссылок для скачивания. Установки она не требует и может быть запущена откуда угодно. В версии 2 (последний вариант — программа написана на MS Small Basic) ей для работы кроме исполняемого файла (cf.exe) ей нужны еще два файла динамических библиотек: SmallBasicLibrary.dll и LitDev.dll, лежащие в той же папке, что и исполняемый файл. И конечно же, обязательно установить MS .NET Framework, без которого не будет работать ни одна программа, написанная на MS SmallBasic.
Поделиться: