如何在函数中创建文件并在其他函数中使用它

时间:2017-09-21 15:20:51

标签: c

文件已创建,但函数WriteFile无法在文件中写入,我需要在不在main中的函数中创建文件。

import psycopg2
import csv
import time
import datetime
import pandas as pd
import sys
reload (sys)
sys.setdefaultencoding('utf8')
psycopg2.extensions.register_type(psycopg2.extensions.UNICODE)
psycopg2.extensions.register_type(psycopg2.extensions.UNICODEARRAY)
print('script sterts')
connect=psycopg2.connect(dbname='db',host='***********',port=5439,user='****',password='********')
cur=connect.cursor()
print('begin execute')
up_pgm_list = pd.read_csv ('/prod/user/home/dqe933/FNI.csv')
with open('/prod/user/home/dqe933/FNI.csv', 'Ur') as csvfile:
         spamreader=csv.reader(csvfile,delimiter=',') 
         for row in spamreader:
                 cur.execute("""INSERT INTO UD_INTERIM.dqe933_fni_new(col1,col2,col3,col4,col5,col6,col7,col8,col9,col10,col11,
          col12,col13,col14,col15,col16,col17,col18,col19,col20,col21,col22,col23,col24,col25,col26,col27,col28)values(?,?,?,
          ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)""",*row)

print('complete')`enter code here`

2 个答案:

答案 0 :(得分:0)

如Eugene Sh所述,您不会将指针保留在您创建的文件中。这解决了它:

#include <stdio.h>
#include <stdlib.h>

FILE *CreateFile(void){
    FILE *file = fopen("file.txt","w");
    if(file == NULL){
        printf("Error : Could not create the file");
        exit(1);
    }
    return file;
}

void WriteFile(FILE *file){
    fprintf(file, "Hello !");
}

int main(void)
{
    FILE *file = CreateFile();
    WriteFile(file);
    fclose(file);
    return 0;
}

或者,如果要将变量file从main发送到函数中,请使用双指针:

#include <stdio.h>
#include <stdlib.h>

void CreateFile(FILE **file){
    *file = fopen("file.txt","w");
    if(*file == NULL){
        printf("Error : Could not create the file");
    }
}

void WriteFile(FILE *file){
    fprintf(file, "Hello !");
}

int main(void)
{
    FILE *file = NULL;
    CreateFile(&file);
    WriteFile(file);
    fclose(file);
    return 0;
}

答案 1 :(得分:0)

问题不在于文件,而是你对指针的使用。在C中,函数参数按值传递:这意味着在您调用CreateFile(file);时代码中,您提供的值为file,即NULL。 你有两种方法可以解决这个问题,你可以使用双指针:

void CreateFile(FILE **file);

调用这样的函数:

FILE *file;
CreateFile(&file);

或者您可以return来自CreateFile()

的值
FILE *CreateFile(void);
FILE *file = CreateFile();

(编辑:我没有看到@HansPetterTaugbølKragset的回答......)