Открыть файл по его полному пути в С++

Я хочу, чтобы пользователь дал мне полный путь, где находится файл, а не только имя файла. Как открыть файл таким образом?

Это что-то вроде этого:

ifstream file;
file.open("C:/Demo.txt", ios::in);

Это не работает.

Ответ 1

Обычно используется символ обратной косой черты в качестве разделителя путей в Windows. Итак:

ifstream file;
file.open("C:\\Demo.txt", ios::in);

Имейте в виду, что при написании в исходном коде на С++ вы должны использовать двойную обратную косую черту, потому что символ обратной косой черты означает что-то особенное внутри двойных кавычек. Таким образом, это относится к файлу C:\Demo.txt.

Ответ 2

Вы можете использовать полный путь с классами fstream. Следующий код пытается открыть файл demo.txt в корне диска C:. Обратите внимание: поскольку это операция ввода, файл уже должен существовать.

#include <fstream>
#include <iostream>
using namespace std;

int main() {
   ifstream ifs( "c:/demo.txt" );       // note no mode needed
   if ( ! ifs.is_open() ) {                 
      cout <<" Failed to open" << endl;
   }
   else {
      cout <<"Opened OK" << endl;
   }
}

Что делает этот код в вашей системе?

Ответ 3

Код кажется мне работающим. Я думаю то же самое с @Iothar.

Проверьте, хотите ли вы включить необходимые заголовки для компиляции. Если он скомпилирован, проверьте, есть ли такой файл, и все, имена и т.д. Совпадают, а также проверьте, чтобы вы имели право читать файл.

Чтобы выполнить кросс-проверку, проверьте, можете ли вы открыть его с помощью fopen..

FILE *f = fopen("C:/Demo.txt", "r");
if (f)
  printf("fopen success\n");

Ответ 4

Для тех, кто динамически получает путь... например. перетащить & падение:

Некоторые основные конструкции получают drag & drop файл с двойными кавычками вроде:

"C:\MyPath\MyFile.txt"

Быстрое и приятное решение - использовать эту функцию для удаления символов из строки:

void removeCharsFromString( string &str, char* charsToRemove ) {
   for ( unsigned int i = 0; i < strlen(charsToRemove); ++i ) {
      str.erase( remove(str.begin(), str.end(), charsToRemove[i]), str.end() );
   }
} 

string myAbsolutepath; //fill with your absolute path
removeCharsFromString( myAbsolutepath, "\"" );

myAbsolutepath теперь содержит только C:\MyPath\MyFile.txt

Функция нуждается в этих библиотеках: <iostream> <algorithm> <cstring>.
Эта функция была основана на этом ответе.

Рабочий скрипт: http://ideone.com/XOROjq