Как я могу создать только файл, не открывая его

#c

#c

Вопрос:

Я пытался создать файл без использования системных команд. У этого кода, который я написал, есть несколько проблем, если я создаю fptr в начале и проверяю его на нулевое значение, тогда возникает двойное освобождение или повреждение, в противном случае это приводит к дампу памяти. Даже с помощью предыдущего метода я не закрывал файл более одного раза, но я думаю, что между строками, которые я не вижу, скрывается что-то очень простое.

 int main()
{
    char* filename;
    char x;
    cout << "enter filename.**: ";
    cin >> filename;
    struct stat buffer;
    if (! stat (filename, amp;buffer))
    {
         cout << ("It existsn");
    }
    else
    {  
         FILE* fptr;    
         fptr = fopen (filename,"w");;
         fclose (fptr);
    }
}
 

Действительно ценю вашу помощь! 🙂

Комментарии:

1. Вы забыли выделить место для filename . (И поскольку это C , используйте std::string .)

2. Если у вас более новый компилятор, вы можете использовать файловую систему TS , которая является частью того, что будет стандартом C 17.

3. как я должен выделить место для имени файла?

4. @cmaster: В «стандартной библиотеке C» такой функции нет.

5. @cmaster creat — это функция POSIX, а не стандартная функция C или C . Другой стандарт библиотеки. То же open самое.

Ответ №1:

Вы можете использовать mknod() в некоторых системах (например, Linux; обратите внимание, что это переносимо не для всех операционных систем).

 if (mknod(filename, S_IFREG|0666, 0) != 0) {
    throw std::system_error(errno, std::system_category());
}
 

В переносимом коде вам нужно будет открыть файл, чтобы его создать.