Открыть файл по его полному пути в C ++ - PullRequest
16 голосов
/ 09 мая 2009

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

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

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

Это не похоже на работу.

Ответы [ 4 ]

17 голосов
/ 09 мая 2009

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

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

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

10 голосов
/ 09 мая 2009

Вы можете использовать полный путь с классами 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;
   }
}

Что этот код производит в вашей системе?

2 голосов
/ 17 февраля 2011

Мне кажется, код работает. Я думаю, то же самое с @ Iothar.

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

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

FILE *f = fopen("C:/Demo.txt", "r");
if (f)
  printf("fopen success\n");
1 голос
/ 02 апреля 2015

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

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

"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

...