Форум: "Начинающим";
Текущий архив: 2011.12.11;
Скачать: [xml.tar.bz2];
ВнизИнтернетТемп в ХР Найти похожие ветки
← →
nl2011 (2011-09-02 09:17) [0]Здравствуйте. Пытался сделать некое подобие обновления программы через интернет, для собственной практики, и наткнулся на такую вещь: первые 2 файла через интернет с моего фтп скачивается нормально, а потом начинается косяк. Потому что, для того чтобы снова качать эти же файлы, программа решает не лесть в интернет, а скачать их из:
C:\Documents and Settings\User\Local Settings\Temporary Internet Files\Content.IE5\IMJFUVYQ\
И потом ничего не помогает убедить программу качать уже не оттуда а с ФТП. Что делать? Как сделать так, чтобы программа качала всегда с фтп?
Вот код как качаю:
function GetSize:string;
var
F: textfile;
s: string;
begin
AssignFile(F, "\update\newsize.txt");
Reset(F);
Readln(f, s);
CloseFile(F);
Result := s;
end;
function GetInetFile(const fileURL, FileName: string): boolean;
const
BufferSize = 1024;
var
hSession, hURL: HInternet;
Buffer: array[1..BufferSize] of Byte;
BufferLen: DWORD;
f: file;
sAppName: string;
begin
Result := False;
sAppName := ExtractFileName(Application.ExeName);
hSession := InternetOpen(PChar(sAppName),
INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
try
hURL := InternetOpenURL(hSession, PChar(fileURL), nil, 0, 0, 0);
try
AssignFile(f, FileName);
Rewrite(f,1);
repeat
InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen);
Application.ProcessMessages();
BlockWrite(f, Buffer, BufferLen);
Application.ProcessMessages();
until
BufferLen = 0;
CloseFile(f);
Result := True;
finally
InternetCloseHandle(hURL);
end;
finally
InternetCloseHandle(hSession);
end;
end;
procedure TDBase.DownloadClick(Sender: TObject);
var
s, FileOnNet, LocalFileName: string;
F: textfile;
i:longint;
begin
AssignFile(F, pp+"update\size.txt");
Reset(F);
Readln(f,s);
CloseFile(F);
FileOnNet := "ftp://4.4.4.4/all/newsize.txt";
LocalFileName := (pp+"\update\newsize.txt");
if GetInetFile(FileOnNet, LocalFileName) = True then
begin
Application.ProcessMessages();
if GetFileSize("\update\newsize.txt") = 0 then
begin
ShowMessage("Ошибка загрузки.");
DeleteFile(pp+"\update\newsize.txt");
exit;
end;
if s <> GetSize then
case MessageDlg("Доступна для скачивания версия : "+GetSize+". Загрузить?", mtConfirmation, [mbyes, mbno], 0) of
idyes:
begin
FileOnNet := "ftp://4.4.4.4/all/1.exe";
LocalFileName := ("\update\1.exe");
if GetInetFile(FileOnNet, LocalFileName) = True then
ShowMessage("Загрузка завершена");
end;
end;
end;
DeleteFile("\update\newsize.txt");
end;
Так вот первый раз файлы newsize.txt и 1.exe качаются с фтп, а все последующее время они качаются из :
C:\Documents and Settings\User\Local Settings\Temporary Internet Files\Content.IE5\IMJFUVYQ\
Притом что папка "IMJFUVYQ" - имеет рандомно генерируемое имя. И на некоторых машинах в нее вообще может быть запрещен доступ)
Помогите)
← →
Anatoly Podgoretsky © (2011-09-02 10:13) [1]> nl2011 (02.09.2011 09:17:00) [0]
Ну так удали до закачки
← →
nl2011 (2011-09-02 10:23) [2]Anatoly Podgoretsky ©
> Ну так удали до закачки
Как я удалю до закачки если :
1) я не знаю в какую папку оно скачалось в начале
2) доступ на удаление может быть закрыт
?
← →
nl2011 (2011-09-02 10:25) [3]В смысле в моем оно туда качается а в другом может в какую нибудь С:\Temp
не сканировать же мне весь диск С в поисках 1.exe )
← →
Anatoly Podgoretsky © (2011-09-02 10:34) [4]Как это не знаешь, а
C:\Documents and Settings\User\Local Settings\Temporary Internet Files\Content.IE5
Очищать все подпапки, элементарнейшая задача, можно делать бат файлом, если ума недостаточно, но лучше FileOperations
← →
nl2011 (2011-09-02 10:42) [5]
> Как это не знаешь...
То есть мне надо предварительно узнавать имя пользователя который сейчас активен в системе, потом искать учетную запись в C:\Documents and Settings\ или как его там, потом проверять есть ли там файл и удалять? или вообще учетки нету, или пути другие, например по русски написаны, или просто другие, то что делать? Или удаление запрещено?
← →
QAZ (2011-09-02 10:53) [6]вообщето в функции которая у тебя используется туева куча флагов
включая ответственые за кэширование
← →
Anatoly Podgoretsky © (2011-09-02 11:03) [7]> nl2011 (02.09.2011 10:25:03) [3]
Туда и больше нигде, это кеш эксплорера, достаточно очищить эту папку не
отвекаясь на имена файлов.
← →
nl2011 (2011-09-02 11:38) [8]
> Туда и больше нигде, это кеш эксплорера, достаточно очищить
> эту папку не
> отвекаясь на имена файлов.
procedure FindFile(Dir:String);
Var
SR:TSearchRec;
FindRes:Integer;
begin
FindRes:=FindFirst(Dir+"*.*",faAnyFile,SR);
While FindRes=0 do
begin
if ((SR.Attr and faDirectory)=faDirectory) and
((SR.Name=".")or(SR.Name="..")) then
begin
FindRes:=FindNext(SR);
Continue;
end;
if ((SR.Attr and faDirectory)=faDirectory) then
begin
FindFile(Dir+SR.Name+"\");
FindRes:=FindNext(SR);
Continue;
end;
Application.ProcessMessages();
if SR.Name = "MyDownload11111.exe" then
FileOperation(Dir+SR.Name, "", FO_DELETE, FOF_ALLOWUNDO + FOF_NOCONFIRMATION);
if SR.Name = "myndfsize.txt" then
FileOperation(Dir+SR.Name, "", FO_DELETE, FOF_ALLOWUNDO + FOF_NOCONFIRMATION);
FindRes:=FindNext(SR);
end;
FindClose(SR);
end;
Ничего оттуда не удаляет. Он их даже не находит в этих системых суперскрытых подпапках, хотя они там есть.
> вообщето в функции которая у тебя используется туева куча
> флагов
> включая ответственые за кэширование
сделал:InternetOpenURL(hSession, PChar(fileURL), nil, 0, 0, INTERNET_FLAG_PRAGMA_NOCACHE);
все равно кэшируются качаемые файлы...
← →
QAZ (2011-09-02 11:46) [9]
> InternetOpenURL(hSession, PChar(fileURL), nil, 0, 0, INTERNET_FLAG_PRAGMA_NOCACHE);
>
> все равно кэшируются качаемые файлы...
как же тебе трудно жить то...
флаги в предпоследнем параметре
← →
nl2011 (2011-09-02 11:54) [10]Да мне трудно жить, посиди на работе с 38.2 посмотрим на твою внимательность)
Кстати,
InternetOpenURL(hSession, PChar(fileURL), nil, 0, INTERNET_FLAG_PRAGMA_NOCACHE, 0);
при установленном флаге предпоследнем параметре - тоже кэшируется)
← →
RWolf © (2011-09-02 12:05) [11]Не нужно сидеть на работе с 38,2°. //К.О.
Флаг называется INTERNET_FLAG_RELOAD, загляните же в MSDN.
← →
Anatoly Podgoretsky © (2011-09-02 12:07) [12]> nl2011 (02.09.2011 11:38:08) [8]
А что тут делают FindRes:=FindFirst(Dir+"*.*",faAnyFile,SR); и строки дальше
Тогда нафига FileOperation
← →
~AQUARIUS~ (2011-09-02 12:15) [13]InternetOpenUrl
INTERNET_FLAG_RELOAD
Forces a download of the requested file, object, or directory listing from the origin server, not from the cache.
← →
nl2011 (2011-09-02 16:49) [14]RWolf ©, ~AQUARIUS~
Спасибо большое)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.12.11;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.004 c