Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.06.22;
Скачать: [xml.tar.bz2];

Вниз

Создать файл с именем больше 8 байт в Pascal   Найти похожие ветки 

 
Vitec   (2008-05-26 13:56) [0]

Здравствуйте! понадобилось создать файл и именем больше 8 символов через Turbo Pascal, если не ошибаюсь, модуль WinDos может работать с такими файлами? И Если да, то как заодно еще и удалить файл после создания?


 
Palladin ©   (2008-05-26 14:57) [1]

через какой Турбо Паскаль? 3.02 ?


 
Vitec   (2008-05-26 15:12) [2]

7.0


 
Anatoly Podgoretsky ©   (2008-05-26 15:27) [3]

В ДОСе нет понятия длинных имен, есть правда подозрительные драйверы.


 
MBo ©   (2008-05-26 15:30) [4]

>то как заодно еще и удалить файл после создания?
Если вообще не создавать, то обе проблемы решены разом ;)


 
Palladin ©   (2008-05-26 15:33) [5]


> Vitec   (26.05.08 15:12) [2]

AFAIR, в поставках tp7 не шло никакого модуля работы с файловой знающей о длинных именах файлов (которые есть не суть ОС, а суть драйвера фс :) ) возможно, группой пионЭров, может быть какие то модули и были созданны, искать нужно...


 
Vitec   (2008-05-26 15:41) [6]

Так, нашел как это сделать через командную строку, командой ren переименовать файл имя до 256 байт.
Только теперь такой вопрос, как запустить коммандную строку из под паскаля, ведь это возможно?
Нашел процедуру exec модуля Dos, но вот такой код:
exec("command.com","ren c:\1.txt 1234567890.txt");
не работает, хотя никаких ошибок не пишет, файл 1.txt существует.
Если запустить вручную command.com и ввести команду, то все работает.
Возможно не находит самого command.com?


 
Германн ©   (2008-05-26 15:43) [7]


> Возможно не находит самого command.com?

command.com был только в Win9x. Сейчас cml.exe


 
Германн ©   (2008-05-26 15:43) [8]

cmd.exe


 
sniknik ©   (2008-05-26 15:48) [9]

> Нашел процедуру exec модуля Dos, но вот такой код:
> exec("command.com","ren c:\1.txt 1234567890.txt");
это не dos. выполни команду ver и посмотри...


 
guav ©   (2008-05-26 15:53) [10]

Переменная окружения (Evnironment Variable) COMSPEC

Вообще если под настоящим DOS то работать не будет. А если под Windows, то можно юзать расширения int 21h напрямую (int 21h без ассемблера можно вызвать через процедуру MsDos модуля Dos кажется).


 
sniknik ©   (2008-05-26 15:55) [11]

> А если под Windows
то все надуманные в этой ветке проблемы исчезают как по мановению руки... а нужна получается простая консольная программка. пишется под дельфи... и никаких проблем.


 
Leonid Troyanovsky ©   (2008-05-26 16:22) [12]


> Германн ©   (26.05.08 15:43) [7]

> command.com был только в Win9x.

Есть и сейчас, даже в 2003.
\system32\command.com ;)

--
Regards, LVT.


 
Германн ©   (2008-05-26 16:34) [13]


> Leonid Troyanovsky ©   (26.05.08 16:22) [12]
>
>

И впрямь. :)


 
Vitec   (2008-05-26 16:36) [14]


> command.com был только в Win9x. Сейчас cmd.exe

Странно, у меня в XPSp2, присутствуют и тот и другой файл

> то все надуманные в этой ветке проблемы исчезают как по
> мановению руки... а нужна получается простая консольная
> программка. пишется под дельфи... и никаких проблем.

нужно именно на паскале (Turbo Pascal 7.0), пусть и используя средства windows (см название темы топика).

> Переменная окружения (Evnironment Variable) COMSPEC

Как до нее добраться из паскаля, подскажите пожалуйста.


 
Palladin ©   (2008-05-26 16:37) [15]


> нужно именно на паскале (Turbo Pascal 7.0),

каковы причины?


> Как до нее добраться из паскаля, подскажите пожалуйста.

ой... дай бог памяти... DosVariable?
вообще смотри в справку модуля DOS...


 
DrPass ©   (2008-05-26 16:37) [16]


> sniknik ©   (26.05.08 15:48) [9]
> > Нашел процедуру exec модуля Dos, но вот такой код:
> > exec("command.com","ren c:\1.txt 1234567890.txt");
> это не dos. выполни команду ver и посмотри...

Турбо-Паскаль команды ver не читает, для него это DOS :)


 
sniknik ©   (2008-05-26 16:48) [17]

> Турбо-Паскаль команды ver не читает, для него это DOS :)
и если в консоли nc запустить и уже из под него ver выполнить результат будет не тот что в "чистой", но тем не менее это не dos.
неважно кто как видит (это только для художников важно). важно технически, если это "чистый" дос то возможности нет в принципе (нужны дополнительные, типа драйвера и т.д.), если из "под винды", то возможность не проблема. проблема добраться до нее из под ограниченного в этом смысле турбо-паскаля.
имхо, но это разница однако.

еще бы выяснить изза чего можно так мазохизмом страдать...  не дай Гейтс выяснится что изза незнания как консольную программe в дельфи писать...


 
Palladin ©   (2008-05-26 16:52) [18]


> типа драйвера

а точнее модули, напрямую отрабатывающие с таблицей AT :) короче свой "API" обращающийся к ФС на низком уровне... содержащий хотя бы две функции: установка/чтение длинного имени :)

и совсем не факт, что эти API будут работать и под виртуальной машиной...


> еще бы выяснить изза чего можно так мазохизмом страдать

во во... )


 
Vitec   (2008-05-26 17:00) [19]

Причина в том что есть программа, строит определенные графики на паскале, в которой срочно понадобилась возможность работы с файлами, у которых длинные (windows) имена.
Еслибы нужно было сделать под делфи, я бы не спрашивал.


 
Palladin ©   (2008-05-26 17:02) [20]


> строит определенные графики на паскале

все чудесатее и чудесатее... графики на паскале это пяяаать...


 
sniknik ©   (2008-05-26 17:08) [21]

> у которых длинные (windows) имена.
в "dos-е" у них есть синонимы, запусти тот же nc и посмотри... обрайся по ним, и вся "проблема". пока не начал тут чтото типа своего драйвера ntfs под dos ваять.


 
Vitec   (2008-05-26 17:30) [22]


> все чудесатее и чудесатее... графики на паскале это пяяаать.
> ..

графику в паскале с 7-ого класса преподают, по крайней мере в нашем лицее.


> в "dos-е" у них есть синонимы, запусти тот же nc и посмотри.
> .. обрайся по ним, и вся "проблема". пока не начал тут чтото
> типа своего драйвера ntfs под dos ваять.

об этом тоже думал, но неизвестно, как сопоставить полное и сокращенное имя друг другу, например есть 6 файлов:
aaaaaaaa11
aaaaaaaa21
aaaaaaaa31
aaaaaaaa12
aaaaaaaa22
aaaaaaaa32
в сокращенном виде их имена
aaa00b~1
aaa40b~1
aaaaaa~1
aaaaaa~2
aaaaaa~3
aaaaaa~4
Как сопоставить одно другому - не понятно.


 
Palladin ©   (2008-05-26 17:38) [23]


> Vitec   (26.05.08 17:30) [22]

так графики не на паскале рисуют, а при помощи паскаля, это раз, два: никакая религия не может тебе запретить портировать код рисования графиков на тот же самый TImage, это два, три: графики, насколько я понимаю, рисуются по результатам функции при каком то шаге дифференцированности, и этот факт не только не мешает, но и способствует при вычислении значений функции (да в общем то при любом способе определений значений графики) использовать для построения TChart, что избавляет тебя от использования всяих, анахренических bgi драйверов...


 
Vitec   (2008-05-26 17:53) [24]

Ну ёлки зеленые, говорю же, что надо именно на паскале!!! Графики и в матлабе строить можно и в статистике и в дедукторе и еще где угодно, а для построения в них будут использоваться не тормозные стандартные библиотеки для TChart компоненты, а OpenGl или ActiveX. Поэтому про саму задачу ничего и не писал, чтоб не начинался флуд.

Все что мне нужно, это возможность переименовать файл под паскалем.
Точнее теперь мне нужно либо добраться до COMSPEC, либо другим способом достаточно быстро находить месторасположения cmd.exe.


 
sniknik ©   (2008-05-26 17:59) [25]

> Как сопоставить одно другому - не понятно.
в винде (в досе этого нет), там где эти файлы пишутся (чего кстати не сделать там имена покороче?) использовать функцию GetShortFileName результат записать например в файлик (только не давать ему тоже длинное имя!) в виде
aaaaaaaa11 - aaa00b~1
...
в дос читать и использовать.


 
sniknik ©   (2008-05-26 18:05) [26]

> а для построения в них будут использоваться не тормозные стандартные библиотеки для TChart компоненты, а OpenGl или ActiveX.
возможность использовать OpenGl или ActiveX, она по твоему в дельфи отсутствует, а в паскале есть????

> Поэтому про саму задачу ничего и не писал, чтоб не начинался флуд.
... ну и дура.

---------------------
бабка
- девушка пробейте билет.
поворачивается парень с длинными волосами.
- я не девушка!
бабка
- ну и дура! нашла чем гордиться...


 
Vitec   (2008-05-26 18:11) [27]


> возможность использовать OpenGl или ActiveX, она по твоему
> в дельфи отсутствует, а в паскале есть????
>

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


 
Vitec   (2008-05-26 19:13) [28]

Все, нашел, для обращения к переменным среды используется функция Getenv
GetEnv("COMSPEC")
Всем спасибо, тему можно закрыть


 
AndreyV ©   (2008-05-26 20:46) [29]

Вот вряд ли ты из command.com вызванном из TP7 создашь длинное имя.


 
Vitec   (2008-05-26 21:47) [30]

Все прекрасно работает:
{$M $4000, 0, 0}
uses dos;
begin
Exec(GetEnv("COMSPEC"),"/c xcopy /Y bufer.txt 1234567890.*");
end.


Для записи файла такая конструкция:
assign(f,"bufer.txt");
rewrite(f);
writeln(f,"lalala");{записываем то, что надо}
close(f);
Exec(GetEnv("COMSPEC"),"/c xcopy /Y bufer.txt 1234567890.*");


Для чтения, наоборот:

Exec(GetEnv("COMSPEC"),"/c xcopy /Y 1234567890.txt bufer.*");
assign(f,"bufer.txt");
reset(f);
readln(f,p);{считываем то, что надо}
close(f);


 
AndreyV ©   (2008-05-26 22:56) [31]

А xcopy помогла!


 
DiamondShark ©   (2008-05-27 12:01) [32]

В Win32.hlp сделай поиск "Interrupt 21h"



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.06.22;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.53 MB
Время: 0.043 c
15-1210173184
koha
2008-05-07 19:13
2008.06.22
Как поднять игровой автомат на Linux


15-1210238925
@!!ex
2008-05-08 13:28
2008.06.22
Кто не прав.


2-1212044089
pirks
2008-05-29 10:54
2008.06.22
Каскадные прокси


2-1211704597
arreke
2008-05-25 12:36
2008.06.22
scale JPEG как в PhotoShop


15-1210168260
тимохов
2008-05-07 17:51
2008.06.22
Как передать кавычку в параметрах командной строки?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский