В хорошо изветном нам глянцевом жюрнале за февраль 2004 года (#062) была статья на эту тему. В ней был преведен код по сабжу PHP: #include <windows.h> void main() { char *old = "C:\\TMP\\somefile.txt"; char *_new = "C:\\TMP\\twodots.."; //переменные для нового и старого имени файла char *newname; wsprintf(newname,"%s.\\",_new); //добавляем символы «.\» в новое имя файла MoveFile(old, newname); //переименовываем файл } Не могу скомпилировать. VC6 ругается: С другим способом тоже проблема: PHP: #include <windows.h> #include <iostream.h> void CreateStrangeFile(char *filename) { char *curdir; //текущая папка char *uncpath; //полный путь до файла в формате UNC GetCurrentDirectory(MAX_PATH,curdir); //получаем текущий каталог wsprintf(uncpath,"\\\\?\\%s\\%s",curdir, filename); //формируем UNC-путь HANDLE hFile = CreateFile( uncpath, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, NULL, NULL); //создаем новый файл DWORD ret; __try { WriteFile(hFile,"This is a super secret info",28,&ret, NULL); //записываем секретную инфу } __finally { CloseHandle(hFile); //закрываем файл } } void main() { CreateStrangeFile("prn"); //создаем файл «prn» } Как исправить? Оригинал статьи
Наиболее вероятная пролема - линкер думает, что собирает не консольное приложение, а вин32 приложение, и поэтому ищет entrypoint WinMain()
Собираю точно консольное приложение. Побовал кстати компилировать с помошью C++Builder 2007. Тоже не получается.
А зачем нужно вот это: Code: char *newname; wsprintf(newname,"%s.\\",_new); ? можно же другим способом "склеить строки"
Может только с помошью wsprintf можно задать неправильное имя? Появилась другая проблема. Программа падает при запуске.