2013-07-02 108 views
-4

我在寫我自己的日誌上換用C/C++槽DEV C++獲取文件大小,文件擴展名和下C/C++

它應該改變一個不同的名稱,它分配給新的文件夾在登錄屏幕背景上的圖像,但我希望它從用戶輸入中獲取圖像,檢查它是否在245KB以下,並且它是否是* .jpeg文件。

理想情況下,它將在set_image()函數中完成。 這裏是我當前的代碼,如果它的任何幫助你:

#include<stdio.h> 
#include<windows.h> 
#include<conio.c> 
#include<stdlib.h> 

int patch(){ 
    system("cls"); 
    system("regedit /s ./src/patch.reg"); 
    system("md %windir%/system/oobe/info/backgrounds"); 
    gotoxy(12,35); 
    printf("Patch Successful!"); 
    return 0; 
} 

int unpatch(){ 
    system("regedit /s ./src/unpatch.reg"); 
    system("rd /q %windir%/system/oobe/info/backgrounds"); 
    gotoxy(12,35); 
    printf("Unpatch Successful!"); 
    return 0; 
} 

int set_image(){ 


} 


main(){ 
     int i; 
     system("cls"); 
     gotoxy(10,1); 
     printf("LOGON CHANGER V0.1"); 
     gotoxy(30,10); 
     printf("1 - Patch"); 
     gotoxy(30,11); 
     printf("2 - Unpatch"); 
     gotoxy(30,12); 
     printf("3 - Set Image"); 
     gotoxy(15,25); 
     printf("Insert your option"); 
     gotoxy(35,25); 
     scanf("%i",&i); 
     switch(i){ 
       case 1: 
         patch(); 
         break; 
       case 2: 
         unpatch(); 
         break; 
       case 3: 
         set_image(); 
         break; 
       default: 
         system("cls"); 
         gotoxy(35,12); 
         printf("Not a valid input, try again ;)"); 
         Sleep(3000); 
         main(); 
     } 
} 
+0

很抱歉的說,但這不是C++。 *函數main不能在程序中使用* – chris

+0

爲什麼你不能在Windows上獨立地執行每一個操作,並且只有當你有實際的代碼嘗試你討論的每一點時我們可以幫助您的一個具體問題? –

+0

那些'系統'調用將會更好地被實際的API調用所取代。 – chris

回答

0

您可以在C標準庫類和公用事業屈指可數做到這一點++。下面的例子應該讓你開始。您需要更改錯誤處理並進行修改以滿足您的特定需求。

#include <algorithm> 
#include <fstream> 
#include <string> 
#include <cctype> 

bool set_image(
    const std::string& inPathname, 
    const std::string& outPathname, 
    size_t maxSize) 
{ 
    // Validate file extension 
    size_t pos = inPathname.rfind('.'); 
    if (pos == std::string::npos) 
    { 
     return false; 
    } 

    // Get the file extension, convert to lowercase and make sure it's jpg 
    std::string ext = inPathname.substr(pos); 
    std::transform(ext.begin(), ext.end(), ext.begin(), std::tolower); 
    if (ext != ".jpg") 
    { 
     return false; 
    } 

    // open input file 
    std::ifstream in(inPathname, std::ios::binary); 
    if (!in.is_open()) 
    { 
     return false; 
    } 

    // check length 
    in.seekg(0, std::ios::end); 
    if (in.tellg() > maxSize) 
    { 
     return false; 
    } 
    in.seekg(0, std::ios::beg); 

    // open output file 
    std::ofstream out(outPathname, std::ios::binary); 
    if (!out.is_open()) 
    { 
     return false; 
    } 

    // copy file 
    std::copy(
     std::istream_iterator<char>(in), 
     std::istream_iterator<char>(), 
     std::ostream_iterator<char>(out)); 

    return true; 
} 
+0

不經意謝謝:) –