![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ИМЯ файла... [D5, Win95/98, WinXP]
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)
> Может как-то замутить со временем или еще как-то???
Уточните, в чём именно проблема. Я сегодня ещё не употреблял, поэтому никак не могу понять.