PDA

View Full Version : پسوند انحصاری



Harry
یک شنبه 23 آذر 1382, 18:25 عصر
سلام
مثلا یه برنامه ویزایشگر مثل ویرایشگر ویندوز نوشتیم ولی می خواهیم فایلهامون رو هنگام ذخیره کرده با هر پسوندی که خودمان خواستیم ذخیره کنیم و موقع باز کردن فایل نیز فقط بتوان فایلهایی با همان پسوند را باز کرد .
چطور این کار امکان پذیر است ؟

phantasm
سه شنبه 25 آذر 1382, 09:11 صبح
سلام
اگه منظورتون اینه که میخواید خودتون یه پسوند بسازید و به فایلهایی که مدیریت میکنید بدید باید یه ساختار جدید برای فایلهاتون طراحی کنید.
چون همونطور که میدونید پسوند در حقیقت مشخص کننده ساختار داخلی فایله....
اگه هم میخواید با توجه به پسوند هایی که از قبل وجود دارن این کار رو انجام بدید مثلا از bmp به jpeg باز هم باید structure داخلی فایل رو تغیر بدید.

Harry
سه شنبه 25 آذر 1382, 18:57 عصر
اگه منظورتون اینه که میخواید خودتون یه پسوند بسازید و به فایلهایی که مدیریت میکنید بدید باید یه ساختار جدید برای فایلهاتون طراحی کنید.
چون همونطور که میدونید پسوند در حقیقت مشخص کننده ساختار داخلی فایله....
اگه هم میخواید با توجه به پسوند هایی که از قبل وجود دارن این کار رو انجام بدید مثلا از bmp به jpeg باز هم باید structure داخلی فایل رو تغیر بدید

میشه این دو روش رو کاملا برام توضیح بدین ؟
ممنون .

DelphiMan
سه شنبه 25 آذر 1382, 23:56 عصر
سلام
مثلا یه برنامه ویزایشگر مثل ویرایشگر ویندوز نوشتیم ولی می خواهیم فایلهامون رو هنگام ذخیره کرده با هر پسوندی که خودمان خواستیم ذخیره کنیم و موقع باز کردن فایل نیز فقط بتوان فایلهایی با همان پسوند را باز کرد .
چطور این کار امکان پذیر است ؟

با سلام
دوست عزیز برای اینکار شما می تونید از OpenDialog و SaveDialog خود دلفی استفاده کنید و انجا می تونید براش تعریف کنید که چه فایلهایی رو باز کنه و یا فایلها رو با چه پسوندی ذخیره کنه...

موفق باشید - صادق

phantasm
چهارشنبه 26 آذر 1382, 01:24 صبح
سلام

روش اول که فکر نمیکنم به کارتون بیاد.
ولی روش دوم:
میتونی برای درگیر نشدن با مباحث پیچیده در ساختار فایل از کامپوننت های ویژه ی این کار استفاده کنی.شما اول باید تصمیم بگیری که برنامه چه نوع فایلهایی رو باید بتونه ویرایش کنه و در ضمن چه پسوند هایی رو باید بتونه به هم دیگه تبدیل کنه و بعد از کامپوننت ویژه این کار استفاده کنی.و یا اگه تابعی در این مورد باشه میتونه کارت رو راحت کنه.
اما اگه خودت بخوای به صورت دستی (منظورم با عملیات کامل) تبدیل پسوند ها رو انجام بدی باید از نوع اطلاعات و چگونگی چینش اونها در فایل مطلع باشی که بتونی اطلاعات مورد نیازتو از فایل منبع استخراج(decode)کنی و این اطلاعات رو بعد از یکسری عملیات محاسباتی که به نوع(پسوند) فایلت مربوطه در فایل مقصد وارد(code)کنی و در اصل اون رو بسازی.البته هر نوع تبدیل پسونی(فرمت) جایز نیست.مثلا نمیتونی یه فایل TXT رو EXE کنی.
امیدوارم متوجه شده باشی.
مثلا این در مورد BITMAP هست که از توی MS SDK HELP دلفی در آوردم:


From the user's point of view, a bitmap is a rectangle of pixels that form a visual image. However, from the developer's perspective, a bitmap is a collection of structures that specify or contain the following elements:

· A header that describes the resolution of the device on which the rectangle of pixels was created, the dimensions of the rectangle, the size of the array of bits, and so on.
· A logical palette.
· An array of bits that defines the relationship between pixels in the bitmapped image and entries in the logical palette.
اینم برای DXB:

The format of a DXB file is as follows:

Header: "AutoCAD DXB 1.0" CR LF ^Z NUL (19 bytes)
Data: Zero or more data records
Terminator: NUL (1 byte)
Each data record begins with a single byte identifying the record type, followed by data items. The data items have various forms of representation and encoding. In the descriptions following, each data item is prefixed with a letter and a hyphen. The meaning of the letter codes is as follows:

w- 16-bit integer, byte reversed in the standard 80x86 style
(least- significant byte first, most-significant byte second).

f- IEEE 64-bit floating-point value stored with lsb first, msb
last (as stored by an 80x87).

l- 32-bit integer with the bytes reversed 80x86 style.

n- Number which may be either a 16-bit integer or a floating-point
number depending on the most recent setting of the number mode
data item. The number mode defaults to 0, signifying integers.
If set to 1, all n- items will be read as floating-point.

u- Item which is either a 32-bit integer or a floating-point
number depending on the most recent number mode setting. If a
32-bit integer, the value is scaled by multiplying it by 65536
(2^16). If a floating-point value, no scaling is applied.

a- Item representing an angle. If number mode is integer, this is
a 32-bit integer representing an angle in units of millionths
of a degree (range 0 to 360,000,000). If a floating-point
number, represents degrees.

In the following table, the lengths include the item-type byte and assume the number mode is set to zero (integer mode). If number mode is floating-point, add 6 bytes to the length for each n- item present and 4 bytes for each a-, or u- item present.

Table 11-20. Byte length for item types

+================================================= =================+
| Item type | Code | Data items | Length |
| |(decimal) | |(bytes) |
|---------------|----------|----------------------------|----------|
| Line | 1 | n-fromx n-fromy | 13 |
| | | n-tox n-toy | |
| | | n-fromx n-fromy n-fromz | |
| | | n-tox n-toy n-toz | |
|---------------|----------|----------------------------|----------|
| Point | 2 | n-x n-y | 5 |
|---------------|----------|----------------------------|----------|
| Circle | 3 | n-ctrx n-ctry n-rad | 7 |
|---------------|----------|----------------------------|----------|
| Arc | 8 | n-ctrx n-ctry n-rad | 19 |
| | | a-starta a-enda | |
|---------------|----------|----------------------------|----------|
| Trace | 9 | n-x1 n-y1 n-x2 n-y2 | 17 |
| | | n-x3 n-y3 n-x4 n-y4 | |
|---------------|----------|----------------------------|----------|
| Solid | 11 | n-x1 n-y1 n-x2 n-y2 | 17 |
| | | n-x3 n-y3 n-x4 n-y4 | |
|---------------|----------|----------------------------|----------|
| Seqend | 17 | (none) | 1 |
|---------------|----------|----------------------------|----------|
| Polyline | 19 | w-closureflag | 3 |
|---------------|----------|----------------------------|----------|
| Vertex | 20 | n-x n-y | 5 |
|---------------|----------|----------------------------|----------|
| 3Dface | 22 | n-x1 n-y1 n-z1 | 25 |
| | | n-x2 n-y2 n-z2 | |
| | | n-x3 n-y3 n-z3 | |
| | | n-x4 n-y4 n-z4 | |
|---------------|----------|----------------------------|----------|
| Scale Factor | 128 | f-scalefac | 9 |
|---------------|----------|----------------------------|----------|
| New Layer | 129 | "layername" NUL |layername |
| | | |length + 2|
|---------------|----------|----------------------------|----------|
| Line | 130 | n-tox n-toy | 5 |
| Extension | | | |
|---------------|----------|----------------------------|----------|
| Trace | 131 | n-x3 n-y3 n-x4 n-y4 | 9 |
| Extension | | | |
|---------------|----------|----------------------------|----------|
| Block Base | 132 | n-bx n-by | 5 |
|---------------|----------|----------------------------|----------|
| Bulge | 133 | u-2h/d | 5 |
|---------------|----------|----------------------------|----------|
| Width | 134 | n-startw n-endw | 5 |
|---------------|----------|----------------------------|----------|
| Number Mode | 135 | w-mode | 3 |
|---------------|----------|----------------------------|----------|
| New Color | 136 | w-colornum | 3 |
|---------------|----------|----------------------------|----------|
| 3Dline | 137 | n-tox n-toy n-toz | 7 |
| Extension | | | |
+------------------------------------------------------------------+

said ali
چهارشنبه 26 آذر 1382, 11:57 صبح
با سلام
عزیز من اول منظورت رو روشن بگو ببینیم چی میخای اگه میخای پسوند خاصی رو باز کنی ویا Save کنی همونطور که اقا صادق گفت با استفاده از یه OpenDialog,SaveDialog ساده این کار ممکنه و اگه میخای وقتی روی یه فایل خاص کلیک شد برنامه شما اجراش کنه باید اون پسوند خاص رو رجیستر کنی که اون هم راحته و باید تو رجیستری ویندوز یه چیزهایی رو بنویسی که الان دقیقا یادم نیست البته راحت میتونی بفهمی کافیه یه خورده با Regedit ور بری میفهمی که کجا باید چی بنویسی.
والسلام.

Harry
جمعه 28 آذر 1382, 15:45 عصر
سلام .
ببینید مثلا ما یه برنامه دفترچه تلفن داریم که سه تا فیلد نام و نام خانوادگی و شماره تلفن داره و این کار به وسیله Client dataset انجام می پذیرد .
خوب در این صورت ما هر فایل CDS رو که با این برنامه باز کنیم دیده میشه و در نتیجه برنامه به هم می ریزه . . من می خوام موقع ذخیره کردن فایل برنامه به جای پسوند CDS از یک پسوند دلخواه استفاده کنم (که خوب معلومه ) . ولی مشکل اینجاست که موضوع باز کردن فایلهای CDS به غیر از این پسوند پسوند دیگه ای رو که قبول نمی کنه .
پس مشکل من موقع باز کردنه .
لطفا کمکم کنید .

مهدی کرامتی
جمعه 28 آذر 1382, 16:19 عصر
مینونید نمونه برنامه یا کدی رو که برای اینکار استفاده کرده‌اید اینجا ضمیمه کنید تا بررسی شود.

phantasm
جمعه 28 آذر 1382, 19:19 عصر
سلام
لازم نیست شما پسوند فایلتون رو عوض کنید.فقط کافی dbedit یا هر چیز دیگه که داده هاتون
رو نشون میده قبل از باز کردن فایل cds جدید غیر فعال بشن یعنی datafield شون تهی بشه و
بعد فایل cds باز بشه اونوقت باید چک کنید که ساختارفایل قابل نمایش هست یا خیر که اینکار رو
از روی تعداد فیلد ها و نوع فیلد هاو... داخل فایل میشه فهمید و در نهایت dbedit ها رو مقدار دهی کنید.
البته این به ذهن من رسید شاید بقیه دوستان راه بهتری ارایه بدن :roll:

said ali
یک شنبه 30 آذر 1382, 13:55 عصر
با سلام
فکر کنم بهترین روش روشی که گفته شد چون تو باز کردن یه فایل اصلا پسوند مهم نیست این و میتونی تو فایلهای عکس راحت تست کنی . فقط کافی چک کنی که اون هم همونجور که گفته شد انجام میشه.