这是我的代码。
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
请帮帮我,我被卡住了!
答案 0 :(得分:0)
你正在做的是打开一个文件!每一个!按键,添加一些文本然后关闭它。
因此,当你按一个键时,你应该打开一个文件然后关闭它!之前!下一个按键到了。基于硬盘驱动器速度(HDD-SSD),键入文件处理机制可以更快地触发按键事件。在这种情况下,您将获得一个无效的文件标识符作为仍在使用的文件(由您)。
我可以建议只打开和关闭文件一次。
您可以在按钮上存储,或者在用户输入的控件的焦点丢失时存储。