Удаление файлов записанных через kernel32.dll - страница 2

 

я скачиваю файл из инета, Такой же функцией, файл текстовый, у меня все четко копируется.


кроме русских букв :-)

 

дело может быть в том, что этим функциям нужно отдавать в работу строки "нужной длинны" ;)

string text = "    .....     "; // строка проинициализирована ннннадцатью пробелами чтобы влезло все содержимое для считывания

тогда память под текст будет распределена заранее и функция ее просто заполнит. а неинициализрованная строковая переменная - это тот еще фокус: куда указывает указатель на нее, когда и когда и как он проинитится, .... :(((

 

Есть такая функция чтения файла из интернета


 
   string ReadWebPage(string url)
   { 
  //Print(url);
   if(!IsDllsAllowed())
     {
      Print("Необходимо в настройках разрешить использование DLL");
      return("");
     }
   int rv = InternetAttemptConnect(0);
   if(rv != 0)
     {
      Print("Ошибка при вызове InternetAttemptConnect()");
      return("");
     }
   int hInternetSession = InternetOpenA("Microsoft Internet Explorer", 0, "", "", 0);
   if(hInternetSession <= 0)
     {
      Print("Ошибка при вызове InternetOpenA()");
      return("");
     }
   int hURL = InternetOpenUrlA(hInternetSession, url, "", 0, 0, 0);
   if(hURL <= 0)
     {
      Print("Ошибка при вызове InternetOpenUrlA()");
      InternetCloseHandle(hInternetSession);
      return(0);
     }
   int cBuffer[1024];
   int dwBytesRead[1];
   string str="";
   while(!IsStopped())
     {
      for(int i=0; i<ArraySize(cBuffer); i++) cBuffer[i]=0;
      
      bool bResult=InternetReadFile(hURL,cBuffer,ArraySize(cBuffer),dwBytesRead);

      if(dwBytesRead[0]==0) break;
      string text="";
      
      Print("Количество считанных байт из инета", dwBytesRead[0] );
      
          for(i=0; i<=dwBytesRead[0]; i++){
         
          }
      
                                          for(i=0; i<ArraySize(cBuffer); i++)
                                            {
                                         
                                             
                                             text=text+CharToStr(cBuffer[i] &0x000000FF);
                                             if(StringLen(text)==dwBytesRead[0]) break;
         
                                             text=text+CharToStr(cBuffer[i]>>8  &0x000000FF);
                                             if(StringLen(text)==dwBytesRead[0]) break;
         
                                             text=text+CharToStr(cBuffer[i]>>16  &0x000000FF);
         
                                             if(StringLen(text)==dwBytesRead[0]) break;
                                             text=text+CharToStr(cBuffer[i]>>24  &0x000000FF);
                                            }
      str=str+text;
       //text=StringSubstr(text,0,count);
     }
      Print("Количество на выходе ", StringLen(str) );
   InternetCloseHandle(hInternetSession);
   return(str);
  }

После чтения файла из интернета - количество считанных байт = 1008

Количество байт на выходе - 449

после преобразования с 16ричными данными часть байт куда то похерилась) + символ пробел поменялся на символ "квадратик" .

С чем может быть связано и что вообще делает это самое преобразование?

 
Здесь правильный пример
Файлы:
 

я вот сейчас обдумал эту тему, и действительно стало интересно.


почему файл ex4 yt может скачать с инета в том виде, чтобы он работал на мт4:

 
Vladon:
почему файл ex4 yt может скачать с инета в том виде, чтобы он работал на мт4:

я когдато нарвался на эту проблему пытаясь закачивать (бинарные) картинки для индикатора уровней Оанды. Проблема оказалась в символе с кодом НОЛЬ который есть в бинарных файлах. Строка как известно тоже заканчивается нулевым символом, поэтому когда вы тащите бинарный файл, он может скачаться весь, но в МТ вы получите только строку-обрезок до первого нуля :(((
 
Плохо, идея была большая...
 
Vladon:
Плохо, идея была большая...
ну почему же. просто нужно узнать размер файла и закачивать его побайтно. закачиваете ноль - приезжает пустая строка, вместо нее в файл пишете символ с кодом 0. остальные пишутся как есть ;)
 
буду пробовать, Идея очень хорошая появилась..
 
ForexTools:
ну почему же. просто нужно узнать размер файла и закачивать его побайтно. закачиваете ноль - приезжает пустая строка, вместо нее в файл пишете символ с кодом 0. остальные пишутся как есть ;)
а как реализовать эту побайтовую загрузку и замену нуля?
Причина обращения: