Are you triggering using a wildcard like *.txt? if so, you don't know all 4 files are really there, or are there in their entirety. Are the files always named the same, or at least part of all files unique? If so, you could create a trigger for each one, and link them using a dependency so the process would not continue unless all files are present. Otherwise, another way would be to use a time-based trigger instead since you really need to make sure all 4 files are there before continuing so you need to analyze the output from the first task (list files) anyway, and flows.
Check the folder every hour or whatever. On the first task's (list files) On Error tab, uncheck no files found as that condition is really ok. Then on the Flow tab, you want 2 On success flows. The first will test if the count of rows from the list files task is equal to 0. If so, that's ok so just stop. Use this as the "other value": {STRING(RowCount|{TASK(a14e9d6f-9a03-4e61-b95f-44e53f4f5976|StdOut)})}. Here I used the list files task direct ID so you need to replace that with yours. It just counts the rows of output. Adjust values accordingly so if an int32 equals 0 it will stop.
Then create another on success flow. Use the same value, but the test this time is != 4. This means there are 1, 2 or 3 files. In the flow control section, select "run notification" and select a notification that you have created to let you know that there is a problem and not all files expected have been received.
Note in the case of all 4 files being present the tasks should run as expected.
Good luck and please let us know what you end up doing.