[ C / C++ ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. -m0rgan-

    -m0rgan- Elder - Старейшина

    Joined:
    29 Sep 2008
    Messages:
    514
    Likes Received:
    170
    Reputations:
    17
    Привет!
    Как средствами С++ удалить определённый файл?

    Накатал такую фигню:
    Code:
    #include "stdafx.h"
    #include <fstream>
    #include <iostream>
    #include < windows.h >
    using namespace std;
    int main() 
    { 
    DeleteFile("C:\\1.txt");
    return 0; 
    }
    
    Получаю ошибку компиляции:

    Code:
    del.cpp
    c:\documents and settings\-bug1z-\мои документы\visual studio 2008\projects\del\del\del.cpp(8) : error C2664: DeleteFileW: невозможно преобразовать параметр 1 из 'const char [9]' в 'LPCWSTR'
            Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
    Журнал построения был сохранен в "file://c:\Documents and Settings\-bug1z-\Мои документы\Visual Studio 2008\Projects\del\del\Debug\BuildLog.htm"
    del - ошибок 1, предупреждений 0
    ========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
    
    Что это значит?
     
  2. .ATK

    .ATK Active Member

    Joined:
    20 Feb 2009
    Messages:
    143
    Likes Received:
    111
    Reputations:
    9
    DeleteFileA() попробуй!
     
    2 people like this.
  3. -m0rgan-

    -m0rgan- Elder - Старейшина

    Joined:
    29 Sep 2008
    Messages:
    514
    Likes Received:
    170
    Reputations:
    17
    .ATK, спасибо!
    И пару вопросов на засыпку:

    1)как скрыть консольное окно, чтоб при запуске проги оно не появлялось..
    2)Дайте линку на ДОСТУПНУЮ статью по работе с файламиэ
    3)Как сделать автозапуск файла?
    Спасибо!
     
    #2843 -m0rgan-, 30 Apr 2009
    Last edited: 30 Apr 2009
  4. desTiny

    desTiny Elder - Старейшина

    Joined:
    4 Feb 2007
    Messages:
    1,006
    Likes Received:
    444
    Reputations:
    94
    1)как скрыть консольное окно, чтоб при запуске проги оно не появлялось

    поменяй в PE-заголовке subsystem с Console на гуй

    2)Дайте линку на ДОСТУПНУЮ статью по работе с файламиэ
    CreateFile
    CloseHandle...
    для начала хватит

    3)Как сделать автозапуск файла?
    ну неужели не надоело вопрос задавать? варианты - прописаться в реестр в Run, в автозагрузку или сервисом заделаться с втозапуском.
     
  5. -m0rgan-

    -m0rgan- Elder - Старейшина

    Joined:
    29 Sep 2008
    Messages:
    514
    Likes Received:
    170
    Reputations:
    17
    Ты не так понял пр автозапуск, я имел в виду запуст левой программы средствами С++
     
  6. Chaak

    Chaak Elder - Старейшина

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    ShellExecute или system("путь до файла")
     
    1 person likes this.
  7. desTiny

    desTiny Elder - Старейшина

    Joined:
    4 Feb 2007
    Messages:
    1,006
    Likes Received:
    444
    Reputations:
    94
    CreateProcess...

    да, кстати.. про файлы и запуск - не смотрите на меня - не обязательно кодить под винду и на апишках

    если у нас C, то юзаем fopen или freopen(..., stdin/stdout) и т.п., если cpp, то ofstream, ifstream и прочие стрим.

    для выполнения программ - system.
    более-менее кросс-платформенно получается
     
  8. Misha-_-rus

    Misha-_-rus New Member

    Joined:
    23 Apr 2009
    Messages:
    4
    Likes Received:
    0
    Reputations:
    0
    Даны сведения о сотрудниках учреждения: фамилия, инициалы, номер телефона. Выдать на экран сведения о сотрудниках, номер телефона которых содержит одинаковые цифры и подсчитать их количество.

    Код рограммы:

    #include <stdio.h>
    #include <math.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <string.h>


    struct sotr
    {char fam [15];
    char inic [5];
    int nom[6];};

    struct sotr N[15];

    int main ()
    {int i,j,n;
    printf("Vvedite kol-vo sotrudnikov - ");
    scanf("%d",&n);
    for (i=0; i<n; i++)
    {printf("familia "); scanf("%s", &N.fam);
    printf("inic "); scanf("%s", &N.inic);
    printf("nomer "); for (j=0; j<6; j++){scanf("%d", &N.nom[j]);} }

    printf("\nSotr: ");
    ?//Здесь нужно вывести на экран сотрудников номера которых содржат одинаковые цифры и их количество.
    printf("%s ", N.fam);}
    printf("\nKol-vo: ");

    getch();
    return 0;}
     
  9. -m0rgan-

    -m0rgan- Elder - Старейшина

    Joined:
    29 Sep 2008
    Messages:
    514
    Likes Received:
    170
    Reputations:
    17
    Как это исправить?
    мб патч какой есть?
    Спасибо!
     
    #2849 -m0rgan-, 1 May 2009
    Last edited: 1 May 2009
  10. razb

    razb Active Member

    Joined:
    24 Mar 2009
    Messages:
    658
    Likes Received:
    133
    Reputations:
    18
    ставь сборку тим систем и будет тебе счастье)
     
  11. -m0rgan-

    -m0rgan- Elder - Старейшина

    Joined:
    29 Sep 2008
    Messages:
    514
    Likes Received:
    170
    Reputations:
    17
    У меня нету возможности качать большие файлы =(
    Есть ещё варианты?
     
  12. razb

    razb Active Member

    Joined:
    24 Mar 2009
    Messages:
    658
    Likes Received:
    133
    Reputations:
    18
    есть Resource Builder, ResED
     
  13. Chaak

    Chaak Elder - Старейшина

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    Заказть полный диск Visual Studio Pro
     
  14. draliokero

    draliokero Member

    Joined:
    14 Mar 2009
    Messages:
    83
    Likes Received:
    6
    Reputations:
    0
    Нужно из определенной папки запустить все файлы с указанным расширением.
    WinAPI начал изучать на днях, я так понимаю делается так: из нужной мне директории все файлы с нужными мне расширениями поместить в массив, а потом в цикле скормить в WinExec?
     
    1 person likes this.
  15. razb

    razb Active Member

    Joined:
    24 Mar 2009
    Messages:
    658
    Likes Received:
    133
    Reputations:
    18
    ага))
     
  16. 0x0c0de

    0x0c0de Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    441
    Likes Received:
    396
    Reputations:
    297

    хм. Зачем массив, когда вы просто юзаете функцию FindFirstFile(NextFile), проверяете что файл не является директорией, потом расширение и запускаете (сразу в цикле поиска файлов, без каких-то дополнительных массивов). Нашли что надо - запустили, нашли - запустили, к чему массивы? )
     
    #2856 0x0c0de, 2 May 2009
    Last edited: 2 May 2009
  17. eLWAux

    eLWAux Elder - Старейшина

    Joined:
    15 Jun 2008
    Messages:
    860
    Likes Received:
    616
    Reputations:
    211
    как-то так.. )
    Code:
    #include <windows.h>
    #include <stdio.h>
    #include <string>
    
    using namespace std;
    #define MAX_PATH 512
    
    // если найдено ".." или "." - пропускаем
    bool is_dots(const char* dir){
            if (strcmp(dir, ".")==0) return true;
            if (strcmp(dir, "..")==0) return true;
            return false;
    }
    
    // рекурс. скан. директории
    void scan_directory(const char* dir, const char* mask){
    
            char filemask[MAX_PATH];
            char temp[MAX_PATH];
            sprintf(filemask, "%s\\%s", dir, mask); // полный путь в filemask
    
            WIN32_FIND_DATA wf;
            HANDLE hf = FindFirstFile(filemask, &wf); // ищем первый
            if (hf != INVALID_HANDLE_VALUE){
                    do{
                            if (!is_dots(wf.cFileName)){ // если найдено не ".." или "."
                                    if (wf.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){ // если найдено папку
                                            char buf[MAX_PATH];     
                                            sprintf(buf, "%s\\%s", dir, wf.cFileName);
                                            scan_directory(buf, mask);      // вызываем сами себя
                                    }
                                    else {
                                            if (strcmp(wf.cFileName, ".exe")>=0) { // если в имени ".ехе"
                                               sprintf("%s\\%s", temp, dir, wf.cFileName);
                                               WinExec(temp,SW_SHOW); // запускаем файл
                                            }
                                    }
                                            
                            }
                    }while (FindNextFile(hf, &wf)); // ищем след.
                    FindClose(hf); // конец поиска
            }
    }
    
    int main(int argc, char** argv){
            WIN32_FIND_DATA wf;
            scan_directory("С:", "*.exe");
            return 0;
    }
     
  18. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    в книге "С++ за 21 день" после выделения и удаления динамической памяти
    PHP:
    int *num = new int;
    delete num;
    рекомендуется обязательно приравнять указатель к нулю
    PHP:
    *num 0;
    я использую связку Eclipse + плагин С++ + minGW.
    И там даже без последней строчки указатель всегда становится равен нулю.

    Как вы считаете, рекомендация ставить 0 - архаизм или же нельзя это игнорировать, только потому что мой компилятор делает это за меня.
     
  19. desTiny

    desTiny Elder - Старейшина

    Joined:
    4 Feb 2007
    Messages:
    1,006
    Likes Received:
    444
    Reputations:
    94
    >>рекомендуется обязательно приравнять указатель к нулю

    а зачем - там не написано?
     
    1 person likes this.
  20. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    написано, что если обращаться к указателю у которого память уже высвобождена delete-ом, но не присвоен нуль - будут самые неявные ошибки, вплоть до зависания.

    а мой компилятор сам приравнивает к нулю.

    хочу понять - щас все компиляторы уже это делают, или тока мой имеет такую фичу.
     
Thread Status:
Not open for further replies.