Как избежать проблем с "\" в именах файлов на c?

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

Пример:

string fileName = @"C:\Users\username\Documents\text.txt";

Но в C я не могу использовать символ @. Поэтому мне нужно заменить "\" на "/" или использовать "\ \":

fopen = ("C:/Users/username/Documents/text.txt","r");

или

fopen = ("C:\\Users\\username\\Documents\\text.txt","r");

Есть ли какой-нибудь трюк в C, чтобы избежать всей этой работы?

Какая дополнительная работа связана с использованием косой черты? Для вас это настоящая проблема или вам просто интересно?

Caleb 26.10.2018 16:15
2
1
52
2

Ответы 2

Вы можете написать небольшую вспомогательную функцию для преобразования всех пробелов назад в пробелы вперед.

void fileconvert(char *filename)
{
    while(*filename !='\0')
    {
        if (*filename == '\')
        {
            *filename = '/';
        }
        filename++;
    }
}

Вы можете использовать его, как показано ниже.

FILE *fp;
char filename[] = "C:/Users/username/Documents/text.txt";

fileconvert(filename);
fp = fopen(filename,"r");

Вероятно, так работает оператор @ в C#

Этот код даже не компилируется и не делает ничего похожего на то, что хочет OP. Более того, если OP разрешает использовать косую черту, нет необходимости в каком-либо преобразовании. Windows (и DOS) поддерживают косую черту всегда.

R.. GitHub STOP HELPING ICE 26.10.2018 14:43

обратитесь к stackoverflow.com/questions/11466139/… для косой черты. Что касается компиляции - приведенный код является фрагментом, а не полным кодом

Rishikesh Raje 26.10.2018 18:09

По большей части, не помещайте в исходные файлы абсолютные буквальные пути, особенно те, которые имеют специфичную для Windows нотацию. Загрузите или создайте пути из каких-либо входных данных, чтобы ваша программа не была привязана к макету файловой системы блока, на котором вы ее разработали.

Другие вопросы по теме