這樣我就可以完成(不完全正確的,但對我很好)的內容從一個叫將Order.txt更新一個txt文件內容
文件listage文件具有以下
比方說,我們目前的時間是14:59
將Order.txt
FILE1.TXT; 5; 15:00
FILE2.TXT; 6; 15:01
file3.txt; 7; 15:02
FILE1.TXT; 2; 15:03
FILE1.TXT; 5; 15:05
FILE2.TXT; 2; 15:06
FILE1.TXT; 3; 15:07
所以基本上,「文件名」;「列出了X秒」,「開始於上市##:##」
該文件將打開,然後列出上面給出的順序所有內容,直到那很好。
但是,現在我需要在使用時保存每個文件,列出的總列表數量以及列出的總時間,以及是否有上市時間(基本上,如果它是按照順序排列的.txt文件)
例如,它應該是這樣的:
used.txt
FILE1.TXT; 4; 15; 1 (1 - 是在order.txt,0 - 它不,這樣做後,我可以做這個,如果我刪除了它的時間),它會改變
FILE2.TXT; 2; 8; 1
file3.txt; 1; 7; 1
基本上, 「文件名」; 「totalTimeItAppears」; 「totalSecondsItShows」; 「IfItIsInOrder.txt」
而且,如果用戶決定再次顯示將Order.txt,它仍然保持不變,當然,它需要再次更新,並將有新的值(在這種情況下,將會有新的值升是上面兩次)
used.txt
FILE1.TXT; 8; 30; 1個
file2的。TXT; 4; 16; 1
file3.txt; 2; 14; 1
我試着已經這樣做了我的代碼,但它只是工作的第一時間,大概只有如果有兩次相同的值,在這種情況下,file1.txt顯示4次,所以它可能不會工作,所以我刪除了代碼。我試着去思考不同的方式,但不能正確地更新它。
這是我的代碼,顯示了將Order.txt:
orderFile = fopen("order.txt","r");
if(orderFile != NULL)
{
fseek(orderFile, 0, SEEK_END);
size = ftell(orderFile);
rewind(orderFile);
if(size == 0)
{
printf("\n< No files to list >\n\n");
fclose(orderFile);
}
else
{
while(fscanf(orderFile," %49[^;];%d; %49[^\n]\n",fileName,&seconds,timeValue) == 3)
{
contentFile = fopen(fileName,"r");
if(contentFile != NULL)
{
sscanf(timeValue,"%d:%d",&hour,&min);
fseek(contentFile, 0, SEEK_END);
size = ftell(contentFile);
rewind(contentFile);
if(size == 0)
{
printf("\n< Scanned File has nothing to list >\n\n");
fclose(contentFile);
}
else
{
time_t now;
time(&now);
struct tm file_time_tm;
file_time_tm = *localtime(&now);
file_time_tm.tm_hour = hour;
file_time_tm.tm_min = min;
file_time_tm.tm_sec = 0;
file_time_tm.tm_isdst = -1;
time_t fileTime = mktime(&file_time_tm);
diff_time = difftime(fileTime, now);
if(diff_time > 0)
{
defaultFile = fopen("default.txt","r");
while(fscanf(defaultFile,"%[^\t]",defaultContent) == 1)
{
printf("%s\n", defaultContent);
}
fclose(defaultFile);
sleep(diff_time);
while(fscanf(contentFile,"%[^\t]",textContent) == 1)
{
printf("%s\n", textContent);
}
fclose(contentFile);
sleep(seconds);
}
else
{
if(diff_time < 0)
{
diff_time2 = diff_time + 86400;
defaultFile = fopen("default.txt","r");
while(fscanf(defaultFile,"%[^\t]",defaultContent) == 1)
{
printf("%s\n", defaultContent);
}
fclose(defaultFile);
sleep(diff_time2);
while(fscanf(contentFile,"%[^\t]",textContent) == 1)
{
printf("%s\n", textContent);
}
fclose(contentFile);
sleep(seconds);
}
else
{
if(diff_time == 0)
{
while(fscanf(contentFile,"%[^\t]",textContent) == 1)
{
printf("%s\n", textContent);
}
fclose(contentFile);
sleep(seconds);
}
}
}
}
}
else
{
sscanf(timeValue,"%d:%d",&hour,&min);
printf("\n< File does not exist >\n\n");
fclose(contentFile);
}
}
fclose(orderFile);
}
}
else
{
printf("\n< File does not exists, please create it again >\n\n");
fclose(orderFile);
}
printf("\n");
我所知道的是,睡眠時間(秒)後我應該把它添加到used.txt,但我不知道如何只添加一次,如果還有其他更新的話。我雖然關於使用「r +」,所以它會寫在該行的頂部,但在我的程序中,我可以重命名文件,所以如果file1.txt將重命名爲file.txt,一個字符仍然會在那裏,並在最終會是; 11(1或0應該是)。
任何有關如何在每次文件正確更新時添加它的想法?
我已經試過這至今:
tempFile = fopen("temp.txt","w");
utilizadosFicheiro = fopen("utilizados.txt","r");
while(fscanf(utilizadosFicheiro," %49[^;];%d;%d;%d",ficheiroNome,&nApresentacao,&tempoAcumulado,&escalonamento) == 4)
{
fseek(tempFile, 0, SEEK_END);
size = ftell(tempFile);
rewind(tempFile);
if(size == 0)
{
fprintf(tempFile,"%s;%d;%d;%d\r\n",ficheiroNome,nApresentacao,tempoAcumulado,escalonamento);
}
else
{
while(fscanf(tempFile," %49[^;];%d;%d;%d",ficheiroNome2,&nApresentacao2,&tempoAcumulado2,&escalonamento2) == 4)
{
if(strcmp(ficheiroNome,ficheiroNome2) == 0)
{
// Edit the line with tempFile "r+"
}
else
{
// Keep line with tempFile "r"
fprintf(tempFile,"%s;%d;%d;%d\r\n",ficheiroNome,nApresentacao,tempoAcumulado,escalonamento);
}
}
}
}
ficheiroNome =文件名
nApresentacao = timesListedNumber
tempoAcumulado = totalSecondsListed
escalonamento = 「時間」 (W生病或者是1或0)
從我能理解的碎片中,最簡單的方法是「將文件加載到內存結構中 - >修改結構 - >將整個文件寫回去」。 – keltar 2015-01-04 16:38:39
嗯,我不知道該怎麼做,順便說一下,我編輯了我的文章,併爲更新部分做了一個代碼,你介意查看它是否正確?如果有評論(代碼),我應該怎麼做? – Ran 2015-01-04 16:50:42