Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 10.09.2011, 18:07
LuciferUA LuciferUA вне форума
Прохожий
 
Регистрация: 10.09.2011
Сообщения: 3
Репутация: 10
Восклицание [Помогите] Отправка файла на фтп

Всем доброго времени суток.
Стоит следующая задача:
Нужно при запуске программы скопировать файл во временную директорию (напр С:\Temp), переименовать и отправить на фтп. никаких форм и визуализации не нужно.
Путь к файлу: %appdata%/Progr/app.exe

Помогите кто чем может. За рабочий вариант программы отблагодарю.
Ответить с цитированием
  #2  
Старый 10.09.2011, 18:50
Аватар для adidas
adidas adidas вне форума
Новичок
 
Регистрация: 24.03.2008
Адрес: Украина
Сообщения: 61
Версия Delphi: XE
Репутация: 10
По умолчанию

Копировать функцией CopyFile и к, примеру, эта функция:
Код:
program out;
     
{..$apptype console}
uses
  windows,
  wininet;

var
 conn_param,inet_open : hinternet;

procedure upload(filename:pchar; ftpfilename:pchar);
const
port=21;
begin
 inet_open := internetopen('iexplore',INTERNET_OPEN_TYPE_DIRECT,nil,nil,0);
//Настройки коннекта( фтп, логин, пасс)
 conn_param := internetconnect(inet_open,'ftp.site.ru',port,'login','pass',INTERNET_SERVICE_FTP,INTERNET_FLAG_PASSIVE,0);
sleep(100);
 ftpputfile(conn_param,filename,ftpfilename,FTP_TRANSFER_TYPE_UNKNOWN,0);
 internetclosehandle(conn_param);
 internetclosehandle(inet_open) ;
END;

begin
//Путь к файлу для загрузки, имя файла на фтп..
upload('C:\file.zip','/pub/file.zip');
if True then
exit;
end.
Ответить с цитированием
  #3  
Старый 10.09.2011, 19:54
LuciferUA LuciferUA вне форума
Прохожий
 
Регистрация: 10.09.2011
Сообщения: 3
Репутация: 10
По умолчанию

Дружище, спасибо, все работает отлично, но только по полным путям. А мне очень нужно из папки %appdata% .. Имя пользователя неизвестно. Помоги это добить пожалуйста.

upd

Может нужно создать функцию определения имени пользователя, а потом использовать её в:
upload('C:\Users\%USERNAME%\AppData\Roaming','/pub/file.zip'); ?

upd2

И возможно ли прикрутить небольшой рандумизатор, что бы имена загружаемых файлов были разные? Напр. file_769476.zip

Последний раз редактировалось LuciferUA, 10.09.2011 в 20:01.
Ответить с цитированием
  #4  
Старый 10.09.2011, 21:36
Аватар для adidas
adidas adidas вне форума
Новичок
 
Регистрация: 24.03.2008
Адрес: Украина
Сообщения: 61
Версия Delphi: XE
Репутация: 10
По умолчанию

Хз, где брал:
Цитата:
В Windows есть специальная функция, позволяющая получить пути к стандартным папкам. В Delphi это будет выглядеть так:
uses ShlObj;

function GetSpecialPath(CSIDL: word): string;
var s: string;
begin
SetLength(s, MAX_PATH);
if not SHGetSpecialFolderPath(0, PChar(s), CSIDL, true)
then s := '';
result := PChar(s);
end;

Функции нужно передать id папки, путь которой хотим получить. Список id идёт далее.
Следует помнить, что не все id будуть работать в разных версиях Windows. Например папки 'Documents & Settungs' нет в 98-х и бессмысленно пытаться получить путь к ней.

Смысл данного поста скорее не в том, чтобы показать, как пользоваться функцией SHGetSpecialFolderPath, а, скорее, дать перечень CSIDL и описание к ним на русском.

Вот полный код:
uses ShlObj;

const
{
// Следующие идентификаторы имеются в модуле ShlObj:
CSIDL_DESKTOP = $0000;
// Виртуальный каталог, представляющий Рабочий стол. (Корень в проводнике)
CSIDL_INTERNET = $0001;
// Виртуальный каталог для Internet Explorer.
CSIDL_PROGRAMS = $0002;
// Меню Пуск -> Программы
CSIDL_CONTROLS = $0003;
// Виртуальный каталог, содержащий иконки пунктов панели управления
CSIDL_PRINTERS = $0004;
// Виртуальный каталог, содержащий установленные принтеры
CSIDL_PERSONAL = $0005;
// Виртуальный каталог, представляющий папку "Мои документы"
// До Vista ссылался на какталог "Мои документы" на жёстком диске
CSIDL_FAVORITES = $0006;
// Избранное. (обычно C:\Documents and Settings\username\Favorites)
CSIDL_STARTUP = $0007;
// Пуск -> Программы -> Автозагрузка
CSIDL_RECENT = $0008;
// Недавние документы (обычно C:\Documents and Settings\username\My Recent Documents
// Для добавления ссылки документа используйте SHAddToRecentDocs
CSIDL_SENDTO = $0009;
// Папка, содержащая ярлыки меню "Отправить" (Sent to...)
//(обычно C:\Documents and Settings\username\SendTo)
CSIDL_BITBUCKET = $000a;
// Виртуальный каталог, содержащий файлы в корзине текущего пользователя
CSIDL_STARTMENU = $000b;
// Элементы меню Пуск текущего пользователя
//(обычно C:\Documents and Settings\username\Start Menu)
CSIDL_DESKTOPDIRECTORY = $0010;
// Рабочий стол текущего пользователя (обычно C:\Documents and Settings\username\Desktop)
CSIDL_DRIVES = $0011;
// Виртуальный каталог, представляющий папку "Мой компьютер"
CSIDL_NETWORK = $0012;
// Виртуальный каталог, представляющий "Сетевое окружение"
CSIDL_NETHOOD = $0013;
// Папка "My Nethood Places" (обычно C:\Documents and Settings\username\NetHood)
// В неё ссылки на избранные расшаренные ресурсы
CSIDL_FONTS = $0014;
// Папка, содержащая установленные шрифты. (обычно C:\Windows\Fonts)
CSIDL_TEMPLATES = $0015;
// Шаблоны документов. (Обычно Settings\username\Templates)
CSIDL_COMMON_STARTMENU = $0016;
// Элементы меню Пуск для всех пользователей.
//(обычно C:\Documents and Settings\All Users\Start Menu)
// Константы, начинающиеся на CSIDL_COMMON_ существуют только в NT версиях
CSIDL_COMMON_PROGRAMS = $0017;
// Меню Пуск -> программы для всех пользователей
//(обычно C:\Documents and Settings\All Users\Start Menu\Programs)
CSIDL_COMMON_STARTUP = $0018;
// Меню Пуск -> Программы -> Автозагрузка для всех пользователей
//(обычно C:\Documents and Settings\All Users\Start Menu\Programs\Startup)
CSIDL_COMMON_DESKTOPDIRECTORY = $0019;
// Элементы Рабочего стола для всех пользователей
//(обычно C:\Documents and Settings\All Users\Desktop)
CSIDL_APPDATA = $001a;
// Папка, в которой рограммы должны хранить свои данные
//(C:\Documents and Settings\username\Application Data)
CSIDL_PRINTHOOD = $001b;
// Установленные принтеры.
//(обычно C:\Documents and Settings\username\PrintHood)
CSIDL_ALTSTARTUP = $001d; // DBCS
// user's nonlocalized Startup program group. Устарело.
CSIDL_COMMON_ALTSTARTUP = $001e; // DBCS
// Устарело
CSIDL_COMMON_FAVORITES = $001f;
// Ссылки "Избранное" для всех пользователей
CSIDL_INTERNET_CACHE = $0020;
// Временные Internet файлы
//(обычно C:\Documents and Settings\username\Local Settings\Temporary Internet Files)
CSIDL_COOKIES = $0021;
// Папка для хранения Cookies (обычно C:\Documents and Settings\username\Cookies)
CSIDL_HISTORY = $0022;
// Хранит ссылки интернет истории IE
}
// Следующих идентификаторов нет в ShlObj:
CSIDL_ADMINTOOLS = $30;
// Административные инструменты текущего пользователя (например консоль MMC). Win2000+

CSIDL_CDBURN_AREA = $3b;
// Папка для файлов, подготовленных к записи на CD/DVD
//(Обычно C:\Documents and Settings\username\Local Settings\Application Data\Microsoft\CD Burning)

CSIDL_COMMON_ADMINTOOLS = $2f;
// Папка, содержащая инструменты администрирования

CSIDL_COMMON_APPDATA = $23;
// Папака AppData для всех пользователей.
//(обычно C:\Documents and Settings\All Users\Application Data)

CSIDL_COMMON_DOCUMENTS = $2e;
// Папка "Общие документы" (обычно C:\Documents and Settings\All Users\Documents)

CSIDL_COMMON_TEMPLATES = $2d;
// Папка шаблонов документов для всех пользователей
//(Обычно C:\Documents and Settings\All Users\Templates)

CSIDL_COMMON_MUSIC = $35;
// Папка "Моя музыка" для всех пользователей.
//(обычно C:\Documents and Settings\All Users\Documents\My Music)

CSIDL_COMMON_PICTURES = $36;
// Папка "Мои рисунки" для всех пользователей.
//(обычно C:\Documents and Settings\All Users\Documents\My Pictures)

CSIDL_COMMON_VIDEO = $37;
// Папка "Моё видео" для всех пользователей
//(C:\Documents and Settings\All Users\Documents\My Videos)

CSIDL_COMPUTERSNEARME = $3d;
// Виртуальная папка, представляет список компьютеров в вашей рабочей группе

CSIDL_CONNECTIONS = $31;
// Виртуальная папка, представляет список сетевых подключений

CSIDL_LOCAL_APPDATA = $1c;
// AppData для приложений, которые не переносятся на другой компьютер
//(обычно C:\Documents and Settings\username\Local Settings\Application Data)

CSIDL_MYDOCUMENTS = $0c;
// Виртуальный каталог, представляющий папку "Мои документы"

CSIDL_MYMUSIC = $0d;
// Папка "Моя музыка"

CSIDL_MYPICTURES = $27;
// Папка "Мои картинки"

CSIDL_MYVIDEO = $0e;
// Папка "Моё видео"

CSIDL_PROFILE = $28;
// Папка пользователя (обычно C:\Documents and Settings\username)

CSIDL_PROGRAM_FILES = $26;
// Папка Program Files (обычно C:\Program Files)

CSIDL_PROGRAM_FILESX86 = $2a;

CSIDL_PROGRAM_FILES_COMMON = $2b;
// Папка Program Files\Common (обычно C:\Program Files\Common)

CSIDL_PROGRAM_FILES_COMMONX86 = $2c;

CSIDL_RESOURCES = $38;
// Папка для ресерсов. Vista и выше (обычно C:\Windows\Resources)

CSIDL_RESOURCES_LOCALIZED = $39;

CSIDL_SYSTEM = $25;
// Папака System (обычно C:\Windows\System32 или C:\Windows\System)

CSIDL_SYSTEMX86 = $29;

CSIDL_WINDOWS = $24;
// Папка Windows. Она же %windir% или %SYSTEMROOT% (обычно C:\Windows)

function GetSpecialPath(CSIDL: word): string;
var s: string;
begin
SetLength(s, MAX_PATH);
if not SHGetSpecialFolderPath(0, PChar(s), CSIDL, true)
then s := GetSpecialPath(CSIDL_APPDATA);
result := PChar(s);
end;
2. Можно использовать random или RandomRange (модуль Math), если нужно генерировать число в определенных пределах.
Ответить с цитированием
  #5  
Старый 10.09.2011, 21:53
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Попробуй так:
Код:
ExpandEnvironmentStrings( PChar(FolderName), nil, 0 );
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #6  
Старый 10.09.2011, 22:00
LuciferUA LuciferUA вне форума
Прохожий
 
Регистрация: 10.09.2011
Сообщения: 3
Репутация: 10
По умолчанию

Парни, спасибо большое за ответы, к сожалению в делфи я полный ноль, но программа нужна как воздух. Кому не сложно помочь, интегрируйте пожалуйста в путь appdat'y и рандумизатор для имени файла, любой, просто что бы файлы с одним и тем же именем не заменили друг друга. В долгу не останусь
Ответить с цитированием
  #7  
Старый 11.09.2011, 12:51
Аватар для adidas
adidas adidas вне форума
Новичок
 
Регистрация: 24.03.2008
Адрес: Украина
Сообщения: 61
Версия Delphi: XE
Репутация: 10
По умолчанию

Код:
uses Math, ShlObj;
...
function GetSpecialPath(CSIDL: word): string;
var s: string;
begin
SetLength(s, MAX_PATH);
if not SHGetSpecialFolderPath(0, PChar(s), CSIDL, true)
then s := GetSpecialPath(CSIDL_APPDATA);
result := PChar(s);
end;
...
var
  path: string;
begin
  path:=GetSpecialPath(CSIDL_APPDATA) +'\filename_' +IntToStr(RandomRange(1000,9999999)) +'.zip';
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:52.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter