Fakedo0r

ReadWriteAPI [C++ XE2]

Mar 8th, 2013
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.28 KB | None | 0 0
  1. // *****************************************************************************
  2. // * CPP:          CPP_ReadWriteAPI
  3. // * AUTOR:        Fakedo0r .:PD-TEAM:.
  4. // * FECHA:        26.08.2012
  5. // * CORREO:       [email protected]
  6. // * BLOG:         Sub-Soul.blogspot.com / Sub-Soul.com
  7. // * FUNCIONES:    ReadFileAPI
  8. //                 WriteFileAPI
  9. //         GetFileSizeAPI
  10. //         FileSizeFormat
  11. //         ByteArrayToString
  12. //             StringToByteArray
  13. // *****************************************************************************
  14. // *****************************************************************************
  15. // <--- #INCLUDE --->
  16. // *****************************************************************************
  17. #include <System.hpp>
  18. #include <SysUtils.hpp>
  19. #include <vector>
  20.  
  21. // *****************************************************************************
  22. // <--- LECTURA --->
  23. // *****************************************************************************
  24. String ReadFileAPI(String sFile) {
  25.     DWORD dwRet = 0;
  26.     int iSize = 0;
  27.     HANDLE hFile;
  28.     std::vector<Byte>vbBuffer;
  29.  
  30.     hFile = CreateFile(UnicodeString(sFile).c_str(), GENERIC_READ,
  31.         FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
  32.  
  33.     if (hFile == INVALID_HANDLE_VALUE) {
  34.         return 0;
  35.     }
  36.  
  37.     iSize = GetFileSize(hFile, 0);
  38.     vbBuffer.resize(iSize);
  39.  
  40.     SetFilePointer(hFile, 0, NULL, FILE_BEGIN);
  41.     ReadFile(hFile, &vbBuffer[0], iSize, &dwRet, NULL);
  42.     CloseHandle(hFile);
  43.  
  44.     return ByteArrayToString(vbBuffer);
  45. }
  46.  
  47. // ******************************************************************************
  48. // <--- ESCRITURA --->
  49. // ******************************************************************************
  50. Boolean WriteFileAPI(String sPath, String sDatos) {
  51.     Boolean bRet;
  52.     DWORD dwRet = 0;
  53.     HANDLE hFile;
  54.     std::vector<char>vbBuffer;
  55.  
  56.     vbBuffer = StringToByteArray(sDatos);
  57.     hFile = CreateFile(UnicodeString(sPath).c_str(), GENERIC_WRITE,
  58.         FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
  59.  
  60.     if (hFile == INVALID_HANDLE_VALUE) {
  61.         return false;
  62.     }
  63.  
  64.     SetFilePointer(hFile, 0, NULL, FILE_END);
  65.     bRet = WriteFile(hFile, &vbBuffer[0], vbBuffer.size(), &dwRet, NULL);
  66.     CloseHandle(hFile);
  67.  
  68.     return bRet;
  69. }
  70.  
  71. // *****************************************************************************
  72. // <--- OBTIENE EL TAMAÑO DE ARCHIVO EN BYTES --->
  73. // *****************************************************************************
  74. String GetFileSizeAPI(String sFile) {
  75.     double iSize = 0;
  76.     HANDLE hFile;
  77.  
  78.     hFile = CreateFile(UnicodeString(sFile).c_str(), GENERIC_READ,
  79.         FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
  80.  
  81.     if (hFile == INVALID_HANDLE_VALUE) {
  82.         return 0;
  83.     }
  84.  
  85.     iSize = GetFileSize(hFile, 0);
  86.  
  87.     return FileSizeFormat(iSize);
  88. }
  89.  
  90. // *****************************************************************************
  91. // <--- CONVERSION DE BYTES A KB / MB / GB / TB --->
  92. // *****************************************************************************
  93. String FileSizeFormat(double iSize) {
  94.     const B = 1;
  95.     const KB = 1024 * B;
  96.     const MB = 1024 * KB;
  97.     const GB = 1024 * MB;
  98.     const TB = 1024 * MB;
  99.  
  100.     if (iSize > TB) {
  101.         return FormatFloat("#.## GB", iSize / TB);
  102.     }
  103.     else if (iSize > GB) {
  104.         return FormatFloat("#.## GB", iSize / GB);
  105.     }
  106.     else if (iSize > MB) {
  107.         return FormatFloat("#.## MB", iSize / MB);
  108.     }
  109.     else if (iSize > KB) {
  110.         return FormatFloat("#.## KB", iSize / KB);
  111.     }
  112.     else {
  113.         return FormatFloat("#.## Bytes", iSize);
  114.     }
  115. }
  116.  
  117. // *****************************************************************************
  118. // <--- CONVIERTE ARRAY DE BYTES EN STRING --->
  119. // *****************************************************************************
  120. String ByteArrayToString(std::vector<Byte>vbArray) {
  121.     String sResult;
  122.     Integer I;
  123.  
  124.     sResult.SetLength(vbArray.size());
  125.  
  126.     for (I = 0; I < vbArray.size(); I++) {
  127.         sResult[I + 1] = vbArray[I];
  128.     }
  129.  
  130.     return sResult;
  131. }
  132.  
  133. // *****************************************************************************
  134. // <--- CONVIERTE STRING EN ARRAY DE CHAR --->
  135. // *****************************************************************************
  136. std::vector<char>StringToByteArray(String sCadena) {
  137.     Integer I;
  138.     std::vector<char>vbTemp;
  139.  
  140.     for (I = 1; I <= sCadena.Length(); I++) {
  141.         vbTemp.push_back(sCadena[I]);
  142.     }
  143.  
  144.     return vbTemp;
  145. }
Advertisement
Add Comment
Please, Sign In to add comment