У меня есть программа на C ++, которая принимает некоторый текст от пользователя и сохраняет его в текстовый файл. Вот фрагменты программы:
#include "stdafx.h"#include <ctime>
#include <fcntl.h>
#include <iostream>
#include <string>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <time.h>
#include <unistd.h>
#include <Windows.h>
using namespace std;
int file_descriptor;
size_t nob;
int check_file(const char* full_path) //Method to check whether a file already exists
{
file_descriptor = open(full_path, O_CREAT | O_RDWR, 0777); //Checking whether the file exists and saving its properties into a file descriptor
}
void write_to_file(const char* text) //Method to create a file and write the text to it
{
time_t current = time(0); //Getting the current date and time
char *datetime = ctime(¤t); //Converting the date and time to string
nob = write(file_descriptor, "----Session----\n\n"); //Writing text to the file through file descriptors
nob = write(file_descriptor, "Date/Time: %s\n\n", datetime); //Writing text to the file through file descriptors
nob = write(file_descriptor, "Text: %s", text); //Writing text to the file through file descriptors
nob = write(file_descriptor, "\n\n\n\n"); //Writing text to the file through file descriptors
}
Есть три основных проблемы с этой программой:
Visual Studio говорит, что не может открыть исходный файл <unistd.h>
(Данный файл или каталог отсутствует).
Идентификатор open
не определено
Идентификатор write
не определено
Как я могу решить эти проблемы, пожалуйста? Я использую Visual Studio 2010 на платформе Windows 7. Я хотел бы использовать файловые дескрипторы в моей программе.
open и write (Unix) зависят от платформы. Стандартный способ доступа к файлам на языке C — это FILE *, fopen и fwrite.
Если вы все еще хотите использовать open / write, вы должны взглянуть на http://msdn.microsoft.com/en-us/library/z0kc8e3z(v=vs.100).aspx. Microsoft добавила поддержку открытия / записи, но переименовала (нестандартные) функции в _open / _write.
Visual C ++ предпочитает ISO-совместимые имена для этих функций: _открыть а также _записывать. Однако имена POSIX open
а также write
работать просто отлично.
Вам нужно #include <io.h>
чтобы получить к ним доступ.
Кроме того, ваш код не использует write
функционировать правильно. Вы, кажется, думаете, что это другое название printf
POSIX не согласен.
Этот код прекрасно компилируется в Visual C ++.
#include <time.h>
#include <io.h>
#include <fcntl.h>
int file_descriptor;
size_t nob;
int check_file(const char* full_path) //Method to check whether a file already exists
{
return open(full_path, O_CREAT | O_RDWR, 0777); // Checking whether the file exists and saving its properties into a file descriptor
}
void write_to_file(const char* text) // Function to write a binary time_t to a previously opened file
{
time_t current = time(0); //Getting the current date and time
nob = write(file_descriptor, ¤t, sizeof current);
}
Если вы создаете unistd.h
файл, который содержит #include <io.h>
и вставьте его в системный путь включения, тогда вам не понадобятся какие-либо изменения кода (при условии, что ваш код изначально совместим с POSIX).
Если вы хотите использовать этот код под Windows без изменений, попробуйте Cygwin: http://www.cygwin.com/
Однако гораздо лучше переписать этот код, используя функции FILE библиотеки C, как уже предлагалось в других ответах. Это будет работать в любой ОС.