Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.85/47: Рейтинг темы: голосов - 47, средняя оценка - 4.85
ganjawar
0 / 0 / 1
Регистрация: 09.09.2011
Сообщений: 40
1

Обрезать строку

10.09.2011, 15:41. Просмотров 8819. Ответов 9
Метки нет (Все метки)

Здравствуйте,такая проблема
когда указываю путь для поиска файлов то в конце пути "*"
а чтобы открыть этот файл Мненадо к введенному пути приклеить имя файла и чтобы путь оказался правильным стереть этот "*"
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include<windows.h>
#include<iostream>
#include<string>
#include <stdio.h>
using namespace std;
 
void crypt(WIN32_FIND_DATAA FindFileData,LPCSTR Dir);
int main(){
    WIN32_FIND_DATAA FindFileData;  //структура файла
    HANDLE hf;
    LPCSTR Dir;
    char a[15];
    Dir="c:\\*";        //путь по умолчанию
 
    printf("input dir\n");      //ввод пути
    cin>>a;
    Dir=(LPCSTR)a;          //явное преобразование для передачи в функцию поиска
      
    hf=FindFirstFileA(Dir, &FindFileData);
    if (hf!=INVALID_HANDLE_VALUE){
        do{
            crypt(FindFileData,Dir);
          }while (FindNextFileA(hf,&FindFileData)!=0);
                FindClose(hf);
        }
        getchar ();
}
void crypt(WIN32_FIND_DATAA FindFileData,LPCSTR Dir)
{
        FILE *stream;
        LPCSTR path;
        //path=Dir-1;
        if ((FindFileData.cFileName!="..") & (FindFileData.cFileName!=".") & (FindFileData.cFileName!=NULL))
        {
            stream = fopen(FindFileData.cFileName,"r+");
            std::cout << FindFileData.cFileName << "\n";
        }
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.09.2011, 15:41
Ответы с готовыми решениями:

Обрезать строку до первого пробела
Первое, что пришло в голову: #include &lt;iostream&gt; using namespace std; ...

Обрезать строку при вводе через fgets
Всем доброго времени суток! Столкнулся с такой проблемой - заполняю список...

Как обрезать строку типа wchar_t* до определенного символа?
собственно вопрос в названии тему, запнулся казалось бы на самом простом,...

Обрезать string
Всем привет. В стринге есть https://oauth.vk....

Обрезать файл сверху, возможно ли?
Можно ли обрезать файл сверху перезаписав его указатель на кол-во считанных...

9
Jupiter
Каратель
Эксперт С++
6569 / 3990 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
10.09.2011, 15:47 2
Цитата Сообщение от ganjawar Посмотреть сообщение
в конце пути "*"
ну дык присвойте последнему символу ноль

Добавлено через 50 секунд
Цитата Сообщение от ganjawar Посмотреть сообщение
к введенному пути приклеить имя файла
strcat в помощь
1
ganjawar
0 / 0 / 1
Регистрация: 09.09.2011
Сообщений: 40
10.09.2011, 15:50  [ТС] 3
Если не сложно напишите код присвоениея нуля..желательно в контексте моей программы..Я в С++ не силен(
0
Jupiter
Каратель
Эксперт С++
6569 / 3990 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
10.09.2011, 16:08 4
C++
1
2
3
4
#include <cstring>
...
char a[15];
a[strlen(a) - 1] = 0;
1
ganjawar
0 / 0 / 1
Регистрация: 09.09.2011
Сообщений: 40
10.09.2011, 16:25  [ТС] 5
error C3892: path: невозможно присваивать значения переменной, которая объявлена как константа
C++
1
2
3
4
5
6
LPCSTR path;
        int lenght;
        lenght=strlen(Dir);
        //Dir[lenght-1]=0;
        path=Dir;
        path[strlen(path)-1]=0;
константу не кто не объявлял

Добавлено через 13 минут
Ответ нашел
LPCSTR это const char
преобразовал в LPSTR
и еще один вопрос где идет условие
C++
1
2
3
4
5
if ((FindFileData.cFileName!="..") & (FindFileData.cFileName!=".") & (FindFileData.cFileName!=NULL))
        {
            stream = fopen(FindFileData.cFileName,"r+");
            std::cout << FindFileData.cFileName << "\n";
        }
даже если имя равно "." или ".." все равно заходит
дело в кодировке??
0
Jupiter
Каратель
Эксперт С++
6569 / 3990 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
10.09.2011, 16:41 6
Цитата Сообщение от ganjawar Посмотреть сообщение
FindFileData.cFileName!=".."
Си строки нужно стравнивать используя strcmp

Добавлено через 1 минуту
Цитата Сообщение от ganjawar Посмотреть сообщение
&
& - это битовая операция "И", а вам нужно логическое "И" - &&
1
ganjawar
0 / 0 / 1
Регистрация: 09.09.2011
Сообщений: 40
10.09.2011, 16:47  [ТС] 7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void crypt(WIN32_FIND_DATAA FindFileData,LPCSTR Dir)
{
        FILE *stream;
        LPSTR path;
 
        if ((strcmp(FindFileData.cFileName,".")==0) & (strcmp(FindFileData.cFileName,"..")==0))//нам нужен только файл
        {   
            std::cout << FindFileData.cFileName << "\n";
        }else{
            path=(LPSTR)Dir;//преобразуем из LPCSTR(const char) в LPSTR(char)
            path[strlen(path)-1]=0; //удаляем "*"
            //path=strcat(path,FindFileData.cFileName);
            //stream = fopen(path,"r+");
            path="";
        }
 
}
Тут проблема в том что при обрезании конца обрезается не только path но и Dir и при след заходе в функцию корневой путь не правильный..Я вроде не передаю адрес..почему так?
0
Jupiter
Каратель
Эксперт С++
6569 / 3990 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
10.09.2011, 16:52 8
Цитата Сообщение от ganjawar Посмотреть сообщение
Я вроде не передаю адрес..почему так?
все что начинается с LP - адрес - Long Pointer

замените
C++
1
LPSTR path;
на
C++
1
char path[20] = { 0 };
, а
C++
1
path=(LPSTR)Dir;
на
C++
1
strcpy(path, Dir);
1
ganjawar
0 / 0 / 1
Регистрация: 09.09.2011
Сообщений: 40
10.09.2011, 16:56  [ТС] 9
а как МНе быть с
C++
1
path=strcat(path,FindFileData.cFileName);
error C2440: =: невозможно преобразовать "char *" в "char [20]"
Не существует преобразований в типы массивов, хотя существуют преобразования в ссылки или указатели на массивы
???
0
Jupiter
Каратель
Эксперт С++
6569 / 3990 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
10.09.2011, 17:04 10
сделайте без присваивания
C++
1
strcat(path, FindFileData.cFileName);
1
10.09.2011, 17:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.09.2011, 17:04

Обрезать пробелы в конце строки.
Задача образеть пробелы в конце строки(строка может быть очень большой). ...

Обрезать/скопировать string до определенного символа
Есть ли библиотечная функция для данных типа string, которая урезает или...

Как обрезать N байт в конце файла не перезаписывая его?
Как обрезать N байт в конце файла не перезаписывая его?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru