سلام چطوری میشه یک فایل متنی را در انتهای یک فایل مثل یک فایل متنی چسباند به گونه ای که فرمت عکس تغییری نکند و عکس نیز قابل نمایش باشد
و اگر میشه این کار رو کرد چطور میشه دوباره این متن رو برگردونیم
:20::20:
Printable View
سلام چطوری میشه یک فایل متنی را در انتهای یک فایل مثل یک فایل متنی چسباند به گونه ای که فرمت عکس تغییری نکند و عکس نیز قابل نمایش باشد
و اگر میشه این کار رو کرد چطور میشه دوباره این متن رو برگردونیم
:20::20:
کسی بلد نیست؟
سلام
بله میشه ... و ساده هم است ...
کافی است بایتهای فایل متنی را در انتهای خود فایل تصویر اضافه کنید.
فایل بزرگتر میشود و نمایش هم داده میشود.
فقط برای جداسازی باید بدانید از کدام نقطه (آدرس بایت یا آفست) متن شروع میشود و تصویر تمام شده ...
راه ساده این کار هم میتواند ان باشد که 4 بایت آخر فایل تصویر جدید را به ذخیره حجم بایتی تصویر اولیه اختصاص دهید که این عدد همان آفست شروع اطلاعات متن است.
مرسی اما چطوری باید این کار را انجام بدهم
میشه یه نمونه برام درست کنید ؟
ممنون میشم
سلام
نمونه ساده ذخیره متن در انتهای فایل:
روی خواندنش هم خودتان سعی کنید، ساده است، اگر بخواهید میتوانید.کد:private void Merge(string file, string text)
{
if ((string.IsNullOrEmpty(file)) || (string.IsNullOrEmpty(text))) return;
var buffer = System.Text.Encoding.UTF8.GetBytes(text);
int buffer_length = buffer.Length;
using (var strm = new System.IO.FileStream(file, System.IO.FileMode.Append, System.IO.FileAccess.Write))
{
strm.Seek(0, System.IO.SeekOrigin.End);
strm.Write(buffer, 0, buffer_length);
strm.WriteByte((byte)(buffer_length & byte.MaxValue));
strm.WriteByte((byte)((buffer_length >> 8) & byte.MaxValue));
strm.WriteByte((byte)((buffer_length >> 16) & byte.MaxValue));
strm.WriteByte((byte)((buffer_length >> 24) & byte.MaxValue));
}
}
(البته در کد بالا چهار بایت آخر را به جای حجم فایل اولیه، حجم خود اطلاعات string درج شده را ریختم، فرق زیادی نمیکند!)
موفق باشید.
دست شما درد نکنه اما من با vb کار می کنم
میشه یه نمونه هم برای vb بگذارید
سلام
کد:Private Sub Merge(ByVal file As String, ByVal text As String)
If (String.IsNullOrEmpty(file)) OrElse (String.IsNullOrEmpty(text)) Then Return
Dim buffer() As Byte = System.Text.Encoding.UTF8.GetBytes(text)
Dim buffer_length As Integer = buffer.Length
Using strm As New System.IO.FileStream(file, System.IO.FileMode.Append, System.IO.FileAccess.Write)
strm.Seek(0, System.IO.SeekOrigin.End)
strm.Write(buffer, 0, buffer_length)
strm.WriteByte(CByte(buffer_length And Byte.MaxValue))
strm.WriteByte(CByte((buffer_length >> 8) And Byte.MaxValue))
strm.WriteByte(CByte((buffer_length >> 16) And Byte.MaxValue))
strm.WriteByte(CByte((buffer_length >> 24) And Byte.MaxValue))
End Using
End Sub
ممنون کار کرد
حالا چطوری میشه از همین فایل متن رو بر گردوند ؟ یعنی عکسش رو انجام داد
اگه اونم برام بنویسید خیلی خوب میشه:11:
سلام
برای من نوشتنش کاری ندارد، در حد همان چند خط قبلی است ...
ولی میخواستم خودتان یک سعی و تلاشی میکردید، مطمئن باشید جواب دست و پاشکسته ای که خود آدم به ان رسیده باشد، ارزش بیشتری دارد و تاثیرش ماندگار و پایدار خواهد بود و در نهایت شمار ا به جایی خواهد رساند که ذهن شما سریعترین و مطمئن ترین حل المسائل شما خواهد شد!
کد:'...
Merge("C:\file.jpg", "بسم ا... الرحمن الرحیم")
Dim x As String = Extract("c:\file.jpg")
'...
Private Shared Function Extract(ByVal file As String) As String
If (String.IsNullOrEmpty(file)) Then Return Nothing
Using strm As New System.IO.FileStream(file, System.IO.FileMode.Open, System.IO.FileAccess.Read)
If (strm.Length <= 4) Then Return Nothing
strm.Seek(-4, System.IO.SeekOrigin.End)
Dim buffer_length As Integer = strm.ReadByte() Or (strm.ReadByte() << 8) Or (strm.ReadByte() << 16) Or (strm.ReadByte() << 24)
If (buffer_length <= 0) OrElse (strm.Length < (buffer_length + 4)) Then Return Nothing
strm.Seek(- buffer_length - 4, System.IO.SeekOrigin.End)
Dim buffer(buffer_length - 1) As Byte
strm.Read(buffer, 0, buffer_length)
Return System.Text.Encoding.UTF8.GetString(buffer)
End Using
End Function
Private Shared Sub Merge(ByVal file As String, ByVal text As String)
If (String.IsNullOrEmpty(file)) OrElse (String.IsNullOrEmpty(text)) Then Return
Dim buffer() As Byte = System.Text.Encoding.UTF8.GetBytes(text)
Dim buffer_length As Integer = buffer.Length
Using strm As New System.IO.FileStream(file, System.IO.FileMode.Append, System.IO.FileAccess.Write)
strm.Seek(0, System.IO.SeekOrigin.End)
strm.Write(buffer, 0, buffer_length)
strm.WriteByte(CByte(buffer_length And Byte.MaxValue))
strm.WriteByte(CByte((buffer_length >> 8) And Byte.MaxValue))
strm.WriteByte(CByte((buffer_length >> 16) And Byte.MaxValue))
strm.WriteByte(CByte((buffer_length >> 24) And Byte.MaxValue))
End Using
End Sub
خیلی ممنون
من خواستم یه نرم افزار برای مخفی کردن متن توی عکس درست کنم
اما کار کردن با system.io رو بلد نیستم من وی بی رو در حد کتاب های آموزشی بلدم و کار با کلاس های مختلف ویندوز رو بلد نیستم
اگر آموزش کامل تری را سراغ دارید حتما بهم بگید
خیلی دوست دارم کامل تر یاد بگیرم اما نمی دانم از کجا
سلام
گمانم کد فوق مشکلتان را حل کند.نقل قول:
من خواستم یه نرم افزار برای مخفی کردن متن توی عکس درست کنم
البته جای بهتر شدن دارد و باید خطا را هم هندلر کنید و...
معمولاً آموزش ویژه ای برای بخش های دات نت و سایر زبان های برنامه نویسی منتشر نمیشود.نقل قول:
اگر آموزش کامل تری را سراغ دارید حتما بهم بگید
شما اگر pdf و کتابهای آموزش برنامه نویسی تحت VB.net یا C#.Net یا حتی VC++.Net و حتی ASP.Net و... را تهیه کنید، امکان دارد فصلی از کتاب به بخش کار با فایل ها و فضای System.IO اختصاص داده شده باشد.
بهترین کار مطالعه مدام کتاب در رشته تخصصی تان است.
=====
البته راه دیگر استفاده از MSDN است.
MSDN تمام اطلاعات کلاسهای فوق را با توضیح و بعضاً نمونه کد دارد.
فقط باید در اولیل کار از یک دیکشنری راحت مثل Babylon استفاده کنید و تازه ان را هم بعداً نیاز نخواهید داشت.
MSDN به صورت برنامه قابل نصب از روی DVD عرضه شده و همان نسخه برنامه عیناً همان محتویات به صورت انلاین در آدرس msdn.microsoft.com هم موجود است.
مثلاً آدرس و مدخل زیر توضیحات بخش کوچکی از توضیحات MSDN در مورد کلاس System.IO.FileStream است:
msdn.microsoft.com/en-us/library/system.io.filestream.aspx
MSDN معتبر ترین و کاملترین مرجع توابع Framework است.
=====
بعد از MSDN به عنوان یک توضیح و help کوچک دم دست میتوانید از VS->View->Object Browser هم استفاده کنید که برای توضیح اندک و سریع و یا یاداوری توابع بسیار کارآمد و سریع است.
موفق باشید.