Использование файловых дескрипторов в Visual Studio 2010 и Windows

У меня есть программа на 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(&current); //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
}

Есть три основных проблемы с этой программой:

  1. Visual Studio говорит, что не может открыть исходный файл <unistd.h> (Данный файл или каталог отсутствует).

  2. Идентификатор open не определено

  3. Идентификатор write не определено

Как я могу решить эти проблемы, пожалуйста? Я использую Visual Studio 2010 на платформе Windows 7. Я хотел бы использовать файловые дескрипторы в моей программе.

2

Решение

open и write (Unix) зависят от платформы. Стандартный способ доступа к файлам на языке C — это FILE *, fopen и fwrite.

Если вы все еще хотите использовать open / write, вы должны взглянуть на http://msdn.microsoft.com/en-us/library/z0kc8e3z(v=vs.100).aspx. Microsoft добавила поддержку открытия / записи, но переименовала (нестандартные) функции в _open / _write.

2

Другие решения

Visual C ++ предпочитает ISO-совместимые имена для этих функций: _открыть а также _записывать. Однако имена POSIX open а также write работать просто отлично.

Вам нужно #include <io.h> чтобы получить к ним доступ.

Кроме того, ваш код не использует write функционировать правильно. Вы, кажется, думаете, что это другое название printfPOSIX не согласен.


Этот код прекрасно компилируется в 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, &current, sizeof current);
}

Если вы создаете unistd.h файл, который содержит #include <io.h>и вставьте его в системный путь включения, тогда вам не понадобятся какие-либо изменения кода (при условии, что ваш код изначально совместим с POSIX).

5

Если вы хотите использовать этот код под Windows без изменений, попробуйте Cygwin: http://www.cygwin.com/

Однако гораздо лучше переписать этот код, используя функции FILE библиотеки C, как уже предлагалось в других ответах. Это будет работать в любой ОС.

-2
По вопросам рекламы [email protected]