Привет! Как средствами С++ удалить определённый файл? Накатал такую фигню: 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 ========== Что это значит?
.ATK, спасибо! И пару вопросов на засыпку: 1)как скрыть консольное окно, чтоб при запуске проги оно не появлялось.. 2)Дайте линку на ДОСТУПНУЮ статью по работе с файламиэ 3)Как сделать автозапуск файла? Спасибо!
1)как скрыть консольное окно, чтоб при запуске проги оно не появлялось поменяй в PE-заголовке subsystem с Console на гуй 2)Дайте линку на ДОСТУПНУЮ статью по работе с файламиэ CreateFile CloseHandle... для начала хватит 3)Как сделать автозапуск файла? ну неужели не надоело вопрос задавать? варианты - прописаться в реестр в Run, в автозагрузку или сервисом заделаться с втозапуском.
CreateProcess... да, кстати.. про файлы и запуск - не смотрите на меня - не обязательно кодить под винду и на апишках если у нас C, то юзаем fopen или freopen(..., stdin/stdout) и т.п., если cpp, то ofstream, ifstream и прочие стрим. для выполнения программ - system. более-менее кросс-платформенно получается
Даны сведения о сотрудниках учреждения: фамилия, инициалы, номер телефона. Выдать на экран сведения о сотрудниках, номер телефона которых содержит одинаковые цифры и подсчитать их количество. Код рограммы: #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;}
Нужно из определенной папки запустить все файлы с указанным расширением. WinAPI начал изучать на днях, я так понимаю делается так: из нужной мне директории все файлы с нужными мне расширениями поместить в массив, а потом в цикле скормить в WinExec?
хм. Зачем массив, когда вы просто юзаете функцию FindFirstFile(NextFile), проверяете что файл не является директорией, потом расширение и запускаете (сразу в цикле поиска файлов, без каких-то дополнительных массивов). Нашли что надо - запустили, нашли - запустили, к чему массивы? )
как-то так.. ) 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; }
в книге "С++ за 21 день" после выделения и удаления динамической памяти PHP: int *num = new int; delete num; рекомендуется обязательно приравнять указатель к нулю PHP: *num = 0; я использую связку Eclipse + плагин С++ + minGW. И там даже без последней строчки указатель всегда становится равен нулю. Как вы считаете, рекомендация ставить 0 - архаизм или же нельзя это игнорировать, только потому что мой компилятор делает это за меня.
написано, что если обращаться к указателю у которого память уже высвобождена delete-ом, но не присвоен нуль - будут самые неявные ошибки, вплоть до зависания. а мой компилятор сам приравнивает к нулю. хочу понять - щас все компиляторы уже это делают, или тока мой имеет такую фичу.