none
字的文件格式打开文件 RRS feed

  • 问题

  • 有一个Form,里面有两个textbox,一个richtextbox,一个PictureBox和可以播放音频的控件。然后我保存这些资料的时候生成一个*.muradil这个样一个文件格式的文件。如果有安装过我自己做的软件的电脑,可以双击刚才保存的文件直接打开,当然打开的时候用我自己做的软件打开。现在肯定知道我的意思了。呵呵。。。太麻烦你了。谢谢你

    就像word ,word的扩展名是.doc,我们保存的时候有一个*.doc的文件出现。我们需要的时候双击那个*.doc的文件就能打开你以前保存过的文件。当然这个里面包含很多信息,比如图片文字等。谢谢你。谢谢你这么详细这么认真的讲解。谢谢。。。。

    呵呵 。。。。。等你的消息。我的邮箱是muradil0903@126.com

    2009年1月8日 15:51

答案

  • Code Snippet

    '保存
            Dim fs As New FileStream(FILE_NAME, FileMode.Create)

            Dim w As New BinaryWriter(fs)
            Dim imgByte() As Byte
            Dim strByte() As Byte

            '把图像数据存到数组
            Dim Ms As MemoryStream = New MemoryStream()
            PictureBox1.Image.Save(Ms, System.Drawing.Imaging.ImageFormat.Jpeg)
            ReDim imgByte(Ms.Length)
            Ms.Position = 0
            Ms.Read(imgByte, 0, Convert.ToInt32(Ms.Length))

            Ms.Close()

            '把文字数据存到数组
            strByte = System.Text.Encoding.UTF8.GetBytes(TextBox1.Text)

            '图片大小
            w.Write(imgByte.Length)
            '文字大小
            w.Write(strByte.Length)
            '保存图片
            w.Write(imgByte)
            '保存文字
            w.Write(strByte)

            w.Close()
            fs.Close()

     

     

    2009年1月10日 3:52
    版主
  • Code Snippet

    '打开
            Dim fs As New FileStream(FILE_NAME, FileMode.Open, FileAccess.Read)

            Dim r As New BinaryReader(fs)
            '图片大小
            Dim intImgLength = r.ReadInt32()
            '文字大小
            Dim intStrLength = r.ReadInt32()
            '图片
            Dim imgByte() As Byte = r.ReadBytes(intImgLength)
            '文字
            Dim strByte() As Byte = r.ReadBytes(intStrLength)

            '显示图片
            Dim Ms As MemoryStream = New MemoryStream()
            Ms.Write(imgByte, 0, imgByte.Length)
            PictureBox1.Image = Image.FromStream(Ms)


            '显示文字
            TextBox1.Text = System.Text.Encoding.UTF8.GetString(strByte)

            r.Close()
            fs.Close()

     

     

    2009年1月10日 3:58
    版主

全部回复

  • 你需要自定义文件格式,比如0-255字节是文件头,后面是数据,0-1字节存的是图片数据的开始位置,2-3字节存的是图片数据的长度

     

    2009年1月9日 8:45
    版主
  •  

    将以下内容放入记事本,保存为"xxx.reg"。注意红色标记部分,应该改成你想要的图标路径!

    Windows Registry Editor Version 5.00

    [HKEY_CLASSES_ROOT\.test]
    @="
    测试文件"

    [HKEY_CLASSES_ROOT\.test\DefaultIcon]
    @="c:\\test.ico"

    [HKEY_CLASSES_ROOT\.test\OpenWithList]

    [HKEY_CLASSES_ROOT\.test\OpenWithList\notepad.exe]

    [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.test]

    [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.test\OpenWithList]
    "a"="xxx.exe"
    "MRUList"="a"

    [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.test\OpenWithProgids]
    "test_auto_file"=hex(0):

     

     

     

    xxx.exe是我自己写的程序。

    我用这个自定义文件格式已经定义好了,但是就是实现不了文件的保存,打开。谢谢。。。
    2009年1月9日 8:49
  • 打开时可以通过command取得文件名

    MsgBox(Command)

     

    如何打开/保存你需要自己写代码

     

    2009年1月9日 9:33
    版主
  • 打开保存当然要写代码了。我不会才问的。知道的话问这个干嘛吗

    2009年1月9日 9:57
  • 我的意思是说要根据你自己定义的文件格式来打开

     

    通过文件名把文件读成二进制数组,然后转成相应的数据显示,比如1001-2000是图片,2001-3000是声音

     

    保存则是反之,把数据转成二进制数据保存

     

    2009年1月9日 10:13
    版主
  •  

    谢谢你。能不能实际举个例子啊。真是太感谢你。谢谢。。。。麻烦你了。我的基础不好。还得练。。。所以。。。。。不好意思麻烦你了。谢谢。。。。。
    2009年1月9日 11:56
  • Code Snippet

    '保存
            Dim fs As New FileStream(FILE_NAME, FileMode.Create)

            Dim w As New BinaryWriter(fs)
            Dim imgByte() As Byte
            Dim strByte() As Byte

            '把图像数据存到数组
            Dim Ms As MemoryStream = New MemoryStream()
            PictureBox1.Image.Save(Ms, System.Drawing.Imaging.ImageFormat.Jpeg)
            ReDim imgByte(Ms.Length)
            Ms.Position = 0
            Ms.Read(imgByte, 0, Convert.ToInt32(Ms.Length))

            Ms.Close()

            '把文字数据存到数组
            strByte = System.Text.Encoding.UTF8.GetBytes(TextBox1.Text)

            '图片大小
            w.Write(imgByte.Length)
            '文字大小
            w.Write(strByte.Length)
            '保存图片
            w.Write(imgByte)
            '保存文字
            w.Write(strByte)

            w.Close()
            fs.Close()

     

     

    2009年1月10日 3:52
    版主
  • Code Snippet

    '打开
            Dim fs As New FileStream(FILE_NAME, FileMode.Open, FileAccess.Read)

            Dim r As New BinaryReader(fs)
            '图片大小
            Dim intImgLength = r.ReadInt32()
            '文字大小
            Dim intStrLength = r.ReadInt32()
            '图片
            Dim imgByte() As Byte = r.ReadBytes(intImgLength)
            '文字
            Dim strByte() As Byte = r.ReadBytes(intStrLength)

            '显示图片
            Dim Ms As MemoryStream = New MemoryStream()
            Ms.Write(imgByte, 0, imgByte.Length)
            PictureBox1.Image = Image.FromStream(Ms)


            '显示文字
            TextBox1.Text = System.Text.Encoding.UTF8.GetString(strByte)

            r.Close()
            fs.Close()

     

     

    2009年1月10日 3:58
    版主
  •  

    太谢谢你了。我就知道你能行。。。谢谢。辛苦了。
    2009年1月10日 5:55
  •  

    feiyun0112再次谢谢你的帮忙。我还有一个问题,麻烦你了。如果我在上面保存的图片上面写了几个点(比如“。”),通过代码实现。然后我想把单击出来的点的位置类似于上面的方法怎么保存啊。比如第一个点的坐标是(100,100),第二个点的坐标是(145,89)。把这个坐标保存下来,然后打开的时候点的位置原来的一样显示出来。谢谢。。。。。。上面的代码太好了。谢谢你。。。。。。如果有1000个点可以保存然后可以打开吗?还有,上面的代码保存的时候我用strByte = System.Text.Encoding.UTF8.GetBytes(TextBox1.Text &TextBox2.Text &TextBox3.Text),打开的时候怎么打开啊。麻烦你了。。。。。。 feiyun0112我觉得你很厉害所以。。。。出一两分钟写一下代码好吗。谢谢。真的麻烦你了。。。。。呵呵。谢谢在线等你的回复。。。。
    2009年1月12日 14:22
  • 和上面一样,先存点坐标数组的长度,在一个个坐标存进去,反之亦然

     

    textbox分开存,先把每个长度存下来,再存数据

    2009年1月13日 0:49
    版主
  •  

    帅哥,我又来麻烦你了。

      我现在用vb.net的自定义控件功能来制作一个自定义控件。我想那个可不可以像文本框一样实现撤下功能。。。。。

    谢谢。。。。

    2009年1月25日 10:45