沒有太多的魔法參與。您沒有顯示足夠的代碼讓我們知道您真正想做什麼,但是此代碼將打開argv[1]
和argv[2]
中指定的文件。
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
if (argc != 3)
{
fprintf(stderr, "Usage: %s file1 file2\n", argv[0]);
return 1;
}
char *dot1 = strrchr(argv[1], '.');
if (dot1 == 0 || strcmp(dot1, ".csv") != 0)
{
fprintf(stderr, "%s: file %s is not a CSV file\n", argv[0], argv[1]);
return 1;
}
FILE *fp1 = fopen(argv[1], "r");
if (fp1 == 0)
{
fprintf(stderr, "%s: failed to open %s for reading\n", argv[0], argv[1]);
return 1;
}
char *dot2 = strrchr(argv[2], '.');
if (dot2 == 0 || strcmp(dot2, ".csv") != 0)
{
fprintf(stderr, "%s: file %s is not a CSV file\n", argv[0], argv[2]);
return 1;
}
FILE *fp2 = fopen(argv[2], "w");
if (fp2 == 0)
{
fprintf(stderr, "%s: failed to open %s for writing\n", argv[0], argv[2]);
return 1;
}
char buffer[1024];
size_t nbytes;
while ((nbytes = fread(buffer, sizeof(char), sizeof(buffer), fp)) != 0)
fwrite(buffer, sizeof(char), nbytes, fp2);
fclose(fp1);
fclose(fp2);
return 0;
}
這將是明智的錯誤檢查fclose(fp2)
;如果失敗,則輸出文件未成功創建。一般錯誤檢查fclose(fp1)
不太重要。
代碼將受益於錯誤報告功能,以便錯誤報告塊只佔用一行而不是四行,但是編寫一個函數來完成這項工作只比您準備處理更復雜一點。不是太複雜,但足以讓我不會超負荷你。儘管如此,代碼非常冗長。
該代碼還假定您有C99或C11,因此您可以在函數的任意點處聲明變量。如果你堅持使用C89,那麼(a)是時候升級到可以使用15歲而不是25歲的標準的時間了,(b)你必須將所有變量聲明移到函數的頂部並將初始化更改爲賦值。
請發佈實際的代碼不工作。順便說一句,這裏的長線可以用'!strcmp(argv [2] + i,「.csv」)代替' –
這裏是一個鏈接! 整個程序! 基本上我打開一個cvs文件廣告與他們任務比我寫它一個新的csv文件! http://www.speedyshare.com/JaA7S/VEGLEGES-vegleg.txt – user3724530
顯然,我必須下載一個.exe才能從該網站獲取內容。除了'.exe'在Mac上無法工作這一事實,我不會使用一個需要他們的下載器的網站,因爲這樣的事情是微不足道的。 –