廣告廣告
  加入我的最愛 設為首頁 風格修改
首頁 首尾
 手機版   訂閱   地圖  簡體 
您是第 3987 個閱讀者
 
發表文章 發表投票 回覆文章
  可列印版   加為IE收藏   收藏主題   上一主題 | 下一主題   
s89tsvs62219
數位造型
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x8
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片
推文 x0
[C/C++] 寫檔案的問題??
各位大大~~
小弟的問題是有個裡面已有資料的2位元檔,小弟想每次做完處裡就在文字檔的後面加上一些文字或修改。
..

訪客只能看到部份內容,免費 加入會員 或由臉書 Google 可以看到全部內容



獻花 x0 回到頂端 [樓 主] From:台灣中華電信 | Posted:2005-08-10 13:41 |
codeboy 手機
個人文章 個人相簿 個人日記 個人地圖
社區建設獎
小有名氣
級別: 小有名氣 該用戶目前不上站
推文 x6 鮮花 x331
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

將整個檔案讀進來,找到要修改的地方後先改正後,再重新存回檔案中~ 表情
這應該是最簡單的方法~



連結有問題請來信,我會盡快修正~^^
通報時請附上是"哪一篇失效"...這樣我才能去修正~麻煩各位好心人士了~

[連結失效通報][ 網頁.伺服.程式 討論區]
----------------------在世界中心呼喊愛情----------------------
深深思念一個人的時候,我們不知不覺的地活在世界的中心...
獻花 x0 回到頂端 [1 樓] From:台灣政府網際 | Posted:2005-08-10 13:46 |
ety 手機
數位造型
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x0 鮮花 x719
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

你的問題表達得不太明確... 可以再多說明一下嗎?


獻花 x0 回到頂端 [2 樓] From:台灣和信超媒體 | Posted:2005-08-10 14:20 |
s89tsvs62219
數位造型
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x8
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

感謝大大~~
我的做法是~~

複製程式
if ( (BitStream_File= fopen("08k_temp.bs", "wb")) == NULL)
 {
     printf("Cannot Open %s\n", tmp);
     return -1;
  }
//先開個暫存檔   


 if ( (BitStream_File_temp= fopen("08k.bs", "rb")) == NULL) 
 {
     printf("Cannot Open %s\n", file);
//看之前檔案有無建立過
 }
 else
 {
//有建立過
           while(!feof(BitStream_File_temp))
           {
       char_read=fread(buffer,1,1024,BitStream_File_temp);
           fwrite(buffer,1,char_read, BitStream_File);
           }       
//複製
    fclose(BitStream_File_temp);
 }
//做之後的處理,把處理過後要寫的檔案寫入暫存檔中



可是最後我的暫存檔要正名成原本的檔案
我用這個方法,他是改檔名的,不過好像如果原有的檔案已存在,他不會做覆蓋的動做
  rename("08k_temp.bs","08k.bs");

可以問一下,我要用什麼指令嗎??我找不到用什麼指令

謝謝


獻花 x0 回到頂端 [3 樓] From:台灣中華電信 | Posted:2005-08-10 14:38 |
ety 手機
數位造型
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x0 鮮花 x719
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

我還是聽不懂閣下的描述, 真是對不起呀! 不知道是不是指, 閣下有一文字檔, 想設計一個函式將其讀取出來, 然後修正後再儲存回去原本的那個檔案? 如果是, 那照著 codeboy 所說的方式會比你所用的方法好一點喔! 1. 讀取檔案 2. 修改 3. 覆蓋回原檔 4. 關閉檔案


獻花 x0 回到頂端 [4 樓] From:台灣和信超媒體 | Posted:2005-08-10 15:09 |
s89tsvs62219
數位造型
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x8
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

嗯~~你說的是 先把所有的東西先讀到記憶體,在做處理,然後最後存回原檔~~

我目前用的方法是讀一段,存一段,因為程式的關係,我會修改的部份只有檔案結束的最後幾個byte,如果全部先讀入,要考慮記憶體分配的大小,因為檔案大小不定,要用到動態記憶體,複雜度就增加了~~

所以我讀一段,存一段,直到檔尾,才會有我要修改增加的地方,剩下的只要把我做出來的暫存檔取代我原有檔案就好。

但~~~我找不到指令~~~如何做丫~~~

大大方法不錯,不過我想到動態記憶體,就頭痛不會寫


獻花 x0 回到頂端 [5 樓] From:台灣中華電信 | Posted:2005-08-10 15:26 |
ety 手機
數位造型
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x0 鮮花 x719
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

讀一段, 存一段, 如果檔案有N段, 你的時間複雜度就是 N + c 了 ... 一次讀完, 一次改完, 然後存回去, 只有 1 + c 的時間複雜度. 再來, 你的 Data type 是什麼呢? 怎會需要考慮記憶體的分配大小? 這是不是你的作業呀? 方便把題目原文公佈出來嗎?


獻花 x0 回到頂端 [6 樓] From:台灣和信超媒體 | Posted:2005-08-10 15:34 |
ety 手機
數位造型
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x0 鮮花 x719
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

我寫了一個程式, 你看看能不能幫得上忙!
語法是 trycopy [file1] [file2]
功能是把 file1 覆蓋到 file2
程式碼如下:
複製程式
#include <stdio.h>
#include <stdlib.h>

int main( int argc, char *argv[] )
{
    if( argc != 3 )
       {
              printf( "ERROR" );
              exit( 0 );
       }

    FILE *file1,*file2;
    char ch;

    if( ( file1 = fopen( argv[ 1 ], "r" ) ) == NULL )
       {
              printf( "ERROR" );
              exit( 0 );
       }

    file2 = fopen( argv[2], "w" );

    while( ( ch = getc( file1 ) ) != EOF )
    {
              printf( "%c", ch );
              putc( ch, file2 );
    }

    fclose( file1 );
    fclose( file2 );
       return( 0 );
}



獻花 x1 回到頂端 [7 樓] From:台灣和信超媒體 | Posted:2005-08-10 16:01 |
s89tsvs62219
數位造型
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x8
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

嗯~~感謝大大~~的回答~~

這個不是作業,這是我專題之中會用到的地方~~

依你的做法~~

我要的是 trycopy [file1] [file2]   但 file1 和 file2 是同一個檔案。 

file1是原本檔案,可以關畢了

file2作完沒有馬上關畢

要在檔案後面再加點東西。

我目前的作法是加上

~處理~寫檔~

  remove("file1");
  rename("file2","file1")

file1是原本檔案 ex: aa.bs
file2是file1裡的資料+新資料 ex.aa_temp.bs

讀檔寫檔用和你差不多的方法

把原本的file1殺掉
把file2的檔案改成file1的檔名,完成取代的動作

ps:有取代的函式嗎??


獻花 x0 回到頂端 [8 樓] From:台灣中華電信 | Posted:2005-08-10 16:25 |
ety 手機
數位造型
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x0 鮮花 x719
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

其實, 那個暫存檔可以不用刪了! 因為下次修改時, 還是會用到呀! 另外, 既然你是要修改某些資料片斷而已, 何不先將所有的資料讀出來, 先放到一個變數裡, 然後寫個函式來修改這個變數內容, 之後再用 w-mode 把這變數內容覆蓋回去原本的檔案呢? 這樣子連暫存檔都不用了! 給你作個參考! ^_^


獻花 x0 回到頂端 [9 樓] From:台灣和信超媒體 | Posted:2005-08-10 18:45 |

首頁  發表文章 發表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.034202 second(s),query:16 Gzip disabled
本站由 瀛睿律師事務所 擔任常年法律顧問 | 免責聲明 | 本網站已依台灣網站內容分級規定處理 | 連絡我們 | 訪客留言