为什么我在MATLAB中使用fprintf会出错?

时间:2016-04-09 12:27:52

标签: matlab keypress file-handling

这是我的代码。

function typeHere_KeyPressFcn(hObject, eventdata, handles)
% hObject    handle to typeHere (see GCBO)
% eventdata  structure with the following fields(seeMATLAB.UI.CONTROL.UICONTROL)
% Key: name of the key that was pressed, in lower case
% Character: character interpretation of the key(s) that was pressed
% Modifier: name(s) of the modifier key(s) (i.e., control, shift) pressed
% handles    structure with handles and user data (see GUIDATA)
    persistent ticStartTime;
    global currentUser;
    ticStartTime = tic;
    out = sprintf('%s',eventdata.Key);
    %disp(out)
    if isempty(ticStartTime)
        time=toc; % use last the tic from the key_pressFcn
    else
        time = toc(ticStartTime); % use tic that was called within this callback
    end
    path = ['Database\' currentUser '\keyCapture_gui1\keyTiming0.txt'];
    fd = fopen(path,'a+'); %write in a file
    fprintf(fd,'%s\n%s',out,time);
    fclose(fd);

此代码接受键盘上的每次击键并同时将其存储在文本文件中,但是当我运行代码时,有时它会起作用,有时会出现以下错误信息。

Error using fprintf
Invalid file identifier. Use fopen to generate a valid file identifier.

Error in gui1>typeHere_KeyPressFcn (line 162)
    fprintf(fd,'%s\n%s',out,time);

Error in gui_mainfcn (line 95)
        feval(varargin{:});

Error in gui1 (line 42)
    gui_mainfcn(gui_State, varargin{:});

Error in
matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)gui1('typeHere_KeyPressFcn',hObject,eventdata,guidata(hObject))
Error while evaluating UIControl KeyPressFcn

请帮帮我,我被卡住了!

1 个答案:

答案 0 :(得分:0)

你正在做的是打开一个文件!每一个!按键,添加一些文本然后关闭它。

因此,当你按一个键时,你应该打开一个文件然后关闭它!之前!下一个按键到了。基于硬盘驱动器速度(HDD-SSD),键入文件处理机制可以更快地触发按键事件。在这种情况下,您将获得一个无效的文件标识符作为仍在使用的文件(由您)。

我可以建议只打开和关闭文件一次。

您可以在按钮上存储,或者在用户输入的控件的焦点丢失时存储。