Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ИМЯ файла... [D5, Win95/98, WinXP]


Страницы:   1 2

GanibalLector ©   (2005-01-03 17:33:00) 

Есть поток,в котором через OLE вызываю Word и создаю документы.После создания,сохраняю его по некоторому пути.
Из основного потока,дожидаюсь завершения второго(того,что с Word-ом работает) и запускаю как отдельный процесс,после этого пользователь наслождается.
Так вот,проблема в имени файла,который сохраняется,а потом запускается.Да,я знаю,что можно в реестре(ини) хранить некоторое значение,наращивать его и т.д.
Но так не хочется!!!Это ж надо заводить переменные,связываться с реестром.ФИ!!!
Вы не подумайте,это могу это сделать элементарно в считанные минуты,но,ХОТЬ УБЕЙТЕ,не хочу я лишних переменных и прочей чепухи.
Может как-то замутить со временем или еще как-то???
З.Ы.Да,забыл,сегодня употреблял...


Fay   (2005-01-03 18:44:00) [21]

2 GanibalLector ©   (03.01.05 18:42) [11]

> Хотя,мне код-то не нужен,я алгоритм просил

Лениво было на русский переводить, честно 8)


GanibalLector   (2005-01-03 18:42:00) [22]

2 GuAV
Все исключительно на АПИ(по совету Цифрочеловека).Примерно,так :

function potok(Param: Pointer): DWord; stdcall;
begin
//KOD
Result:=0;
exitthread(Result);
end;
// вызываю так :
CreateThread(nil,0,@potok,nil,0,ThreadID);

2 Fay
Спасибо,ща гляну...Хотя,мне код-то не нужен,я алгоритм просил.


GuAV   (2005-01-03 18:32:00) [23]

GanibalLector ©   (03.01.05 18:17) [8]

Про реестр/ини солидарен, а вот про глобальные переменные зря. Поток TThread или BeginThread ?


Fay   (2005-01-03 18:25:00) [24]

В случае с "Вася_Пупкин" GetTempFilename (IMHO) не подойдёт 8(
Попробуй так

function GetUnqName(const cPath, cPrefix, cExt : string; var n : Integer) : String;
var
 h : THandle;
 le : DWORD;
label
 Labels_Rulezz;
begin
 h := INVALID_HANDLE_VALUE;
 try
   goto Labels_Rulezz;
   repeat
     le := GetLastError;
     if le <> ERROR_FILE_EXISTS then
       raise Exception.Create(SysErrorMessage(le));
     Inc(n);
     Labels_Rulezz :
     Result := Format('%s%s%d%s', [cPath, cPrefix, n, cExt]);
     h := CreateFile(PChar(Result), 0, 0, nil, CREATE_NEW, FILE_FLAG_DELETE_ON_CLOSE, 0);
   until h <> INVALID_HANDLE_VALUE;
 finally
   if h <> INVALID_HANDLE_VALUE then CloseHandle(h)
   else Result := '';
 end;
end;

procedure TForm1.Button1Click(Sender : TObject);
var
 s : string;
 n : Integer;
 i : Integer;
 tc : DWORD;
 h : DWORD;
begin
 tc := GetTickCount;
 n := 1;
 for i := 0 to 999 do
   begin
     s := GetUnqName('c:\!!!!\', 'Вася_Пупкин_', '.doc', n);
     // Занять имя
     h := CreateFile(PChar(s), 0, 0, nil, CREATE_NEW, 0, 0);
     if h <> INVALID_HANDLE_VALUE then CloseHandle(h);
   end;
 ShowMessage(Format('%d ms', [GetTickCount - tc]));
end;


GanibalLector   (2005-01-03 18:17:00) [25]

2 GuAV  [7]
Не люблю я глобальные переменные и реестр(ини) тоже.
Вот такой вот я ;)


GuAV   (2005-01-03 18:13:00) [26]

А почему бы не запомнить имя из сохранившего потока в глобальную переменную  потом прочитать его оттуда ?


GanibalLector   (2005-01-03 18:08:00) [27]

Хотя...может получить все файлы и найти с максимальной датой и временем. Наверно так и поступлю ;)


GanibalLector   (2005-01-03 18:04:00) [28]

>Я делаю так - создаю файл по шаблону, имя файла генерируется автоматически самим вордом. После заполнения файла показываю ворд, активирую его, отключаю все Ole-соединения, но ворд не закрываю. Пользователь оказывается в ворде

У меня так и было...Так нельзя!!!Возникают ошибки,довольно таки часто,которым нет обьяснений.Хотя на некоторых машинах,все отлично.Вот поэтому и замутил с сохранением и открытием отдельным процессом.

>По дате и времени (до милисекунды) называй и будет уникально
Да,но!!!Два разных потока.Когда я создал файл,я дожидаюсь завершения потока в основном потоке...а это время.


Александр Иванов   (2005-01-03 17:59:00) [29]

По дате и времени (до милисекунды) называй и будет уникально.


Sandman25   (2005-01-03 17:58:00) [30]

Я делаю так - создаю файл по шаблону, имя файла генерируется автоматически самим вордом. После заполнения файла показываю ворд, активирую его, отключаю все Ole-соединения, но ворд не закрываю. Пользователь оказывается в ворде


GanibalLector   (2005-01-03 17:52:00) [31]

Хорошо,продолжу.
Мне необходимо придумать алгоритм,который бы УНИКАЛЬНО называл выходные файлы.
Например :
-создаю вт.поток,который создал документ и сохранил "Вася_Пупкин1.doc"
-вт.поток помер
-из основного потока пошел CreateProcess с параметром "Вася_Пупкин1.doc"

Надеюсь так понятно...


Fay   (2005-01-03 17:44:00) [32]

> наслождается

Вредно столько пить 8)

> Может как-то замутить со временем или еще как-то???

Уточните, в чём именно проблема. Я сегодня ещё не употреблял, поэтому никак не могу понять.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо