Выдает ошибку no such file or directory

Ошибка «No such file or directory» появляется, когда нужный файл отсутствует.

Давайте исключим самое банальное:

1. Файла нет на диске

user@pc1:~$ cat hello.cpp
cat: hello.cpp: No such file or directory

Поскольку отсутствует файл hello.cpp , то выводится ошибка

2. Кириллица в названии

Проверьте, что в названии файла буква «с» не написана кириллицей. Например в расширении «.cpp».

3. Неправильный путь

Пример из Python

data_file= open ("../text.txt",'r')

«../» в общем случае говорит о том, что файл будет искаться на 1 директорию выше, чем файл с кодом.

Если файл лежит в директории с кодом, то следует писать:

data_file= open ("./text.txt",'r')

4. Неправильная битность

Вы можете увидеть ту же ошибку, если пытаетесь запустить например 64-битное приложение на 32-битной Windows

5. Более экзотические причины.

Причина ошибки может быть самой разной, в зависимости от приложения, которое вы используете.

Если это как раз тот случай, напишите о нем в комментариях, в будущем это очень поможет другим.

Нашли опечатку или ошибку? Выделите её и нажмите Ctrl+Enter

Помогла ли Вам эта статья?

Understanding absolute and relative paths

The term path means exactly what it sounds like. It shows the steps that need to be taken, into and out of folders, to find a file. Each step on the path is either a folder name, the special name . (which means the current folder), or the special name .. (which means to go back/out into the parent folder).

The terms absolute and relative also have their usual English meaning. A relative path shows where something is relative to some start point; an absolute path is a location starting from the top.

Paths that start with a path separator, or a drive letter followed by a path separator (like C:/foo) on Windows, are absolute. (On Windows there are also UNC paths, which are necessarily absolute. Most people will never have to worry about these.)

Paths that directly start with a file or folder name, or a drive letter followed directly by the file or folder name (like C:foo) on Windows, are relative.

Understanding the «current working directory»

Relative paths are «relative to» the so-called current working directory (hereafter abbreviated CWD). At the command line, Linux and Mac use a common CWD across all drives. (The entire file system has a common «root», and may include multiple physical storage devices.) Windows is a bit different: it remembers the most recent CWD for each drive, and has separate functionality to switch between drives, restoring those old CWD values.

Each process (this includes terminal/command windows) has its own CWD. When a program is started from the command line, it will get the CWD that the terminal/command process was using. When a program is started from a GUI (by double-clicking a script, or dragging something onto the script, or dragging the script onto a Python executable) or by using an IDE, the CWD might be any number of things depending on the details.

Importantly, the CWD is not necessarily where the script is located.

The script’s CWD can be checked using os.getcwd, and modified using os.chdir. Each IDE has its own rules that control the initial CWD; check the documentation for details.

To set the CWD to the folder that contains the current script, determine that path and then set it:

os.chdir(os.path.dirname(os.path.abspath(__file__)))

Verifying the actual file name and path

  • There are many reasons why the path to a file might not match expectations. For example, sometimes people expect C:/foo.txt on Windows to mean «the file named foo.txt on the desktop». This is wrong. That file is actually — normally — at C:/Users/name/Desktop/foo.txt (replacing name with the current user’s username). It could instead be elsewhere, if Windows is configured to put it elsewhere. To find the path to the desktop in a portable way, see How to get Desktop location?.

    It’s also common to mis-count ..s in a relative path, or inappropriately repeat a folder name in a path. Take special care when constructing a path programmatically. Finally, keep in mind that .. will have no effect while already in a root directory (/ on Linux or Mac, or a drive root on Windows).

    Take even more special care when constructing a path based on user input. If the input is not sanitized, bad things could happen (e.g. allowing the user to unzip a file into a folder where it will overwrite something important, or where the user ought not be allowed to write files).

  • Another common gotcha is that the special ~ shortcut for the current user’s home directory does not work in an absolute path specified in a Python program. That part of the path must be explicitly converted to the actual path, using os.path.expanduser. See Why am I forced to os.path.expanduser in python? and os.makedirs doesn’t understand «~» in my path.

  • Keep in mind that os.listdir will give only the file names, not paths. Trying to iterate over a directory listed this way will only work if that directory is the current working directory.

  • It’s also important to make sure of the actual file name. Windows has an option to hide file name extensions in the GUI. If you see foo.txt in a window, it could be that the file’s actual name is foo.txt.txt, or something else. You can disable this option in your settings. You can also verify the file name using the command line; dir will tell you the truth about what is in the folder. (The Linux/Mac equivalent is ls, of course; but the problem should not arise there in the first place.)

  • Backslashes in ordinary strings are escape sequences. This causes problems when trying to a backslash as the path separator on Windows. However, using backslashes for this is not necessary, and generally not advisable. See Windows path in Python.

  • When trying to create a new file using a file mode like w, the path to the new file still needs to exist — i.e., all the intervening folders. See for example Trying to use open(filename, ‘w’ ) gives IOError: [Errno 2] No such file or directory if directory doesn’t exist. Also keep in mind that the new file name has to be valid. In particular, it will not work to try to insert a date in MM/DD/YYYY format into the file name, because the /s will be treated as path separators.

Understanding and fixing ‘No Such File or Directory’ errors in C++ can be a challenging task, especially for beginners. But, with proper guidance and understanding, you can quickly learn how to resolve these errors. This comprehensive guide will walk you through the process of identifying the causes of the error and fixing them.

Table of Contents

  • Understanding the Error
  • Common Causes of ‘No Such File or Directory’ Errors
  • 1. Incorrect File Path
  • 2. Misspelled File Name or Extension
  • 3. Missing Header Files
  • 4. Incorrect Compiler Settings
  • FAQs

Understanding the Error

‘No Such File or Directory’ is a common error encountered while compiling C++ programs. It occurs when the compiler is unable to locate a file that is required for the program to work. This error is often a result of a typo in the file name, an incorrect file path, or missing header files.

Common Causes of ‘No Such File or Directory’ Errors

There are several reasons why you might encounter a ‘No Such File or Directory’ error in C++. Let’s explore some of the most common causes and their solutions.

1. Incorrect File Path

The most common reason for this error is an incorrect file path. Make sure the file you are trying to include or open is in the correct location.

Solution: Verify the file path in your code and ensure it matches the actual path of the file on your system. If the file is in the same folder as your source code, you can use a relative path (e.g., «./filename.txt»). If the file is in a different folder, you should provide an absolute path (e.g., «/home/user/folder/filename.txt»).

2. Misspelled File Name or Extension

Another common cause of this error is a misspelled file name or extension. The compiler is case-sensitive, so make sure you are using the correct case for your file names and extensions.

Solution: Double-check the spelling and case of the file name and extension in your code. Make sure it matches the actual file name on your system.

Sometimes, the error occurs because your program relies on a header file that is missing from your system or project.

Solution: First, verify if the required header file is present in your project or system’s include directories. If the header file is missing, you may need to install the appropriate library or package for your system. For instance, if you are using a Linux system, you can use package managers like apt or yum to install missing libraries.

4. Incorrect Compiler Settings

Incorrect compiler settings, such as not specifying the correct include directories, can also lead to ‘No Such File or Directory’ errors.

Solution: Make sure your compiler settings include the correct directories for header files. You can specify the include directories using the -I flag when compiling your program (e.g., g++ -I/path/to/include main.cpp).

FAQs

Q: Can I use both relative and absolute paths in my C++ code?

Yes, you can use both relative and absolute paths in your C++ code. However, it’s generally recommended to use relative paths for files within your project to maintain portability.

You can use the locate command on Linux systems to find the location of header files. On Windows, you can use the File Explorer’s search functionality to locate header files.

Q: How do I add a new include directory to my compiler settings?

You can add a new include directory to your compiler settings using the -I flag followed by the path to the directory (e.g., g++ -I/path/to/include main.cpp).

If you can’t find the required header file on your system, you may need to install the appropriate library or package. Check the documentation of the library you are using for installation instructions.

Q: Can I use a different compiler to fix ‘No Such File or Directory’ errors?

While using a different compiler may resolve the issue in some cases, it’s best to first try fixing the problem with your current compiler. If the issue persists, you can consider trying a different compiler.

  • C++ File I/O
  • Understanding C++ Include Directories
  • GCC Compiler Options

The error FileNotFoundError: [Errno 2] No such file or directory means that Python can’t find the file or directory you are trying to access.

This error can come from calling the open() function or the os module functions that deal with files and directories.

To fix this error, you need to specify the correct path to an existing file.

Let’s see real-world examples that trigger this error and how to fix them.

Error from open() function

Suppose you use Python to open and read a file named output.txt as follows:

with open('output.txt', 'r') as f:
    data = f.read()

Python will look for the output.txt file in the current directory where the code is executed.

If not found, then Python responds with the following error:

Traceback (most recent call last):
  File ...
    with open('output.txt', 'r') as f:
FileNotFoundError: [Errno 2] No such file or directory: 'output.txt'

If the file exists but in a different directory, then you need to specify the correct path to that file.

Maybe the output.txt file exists in a subdirectory like this:

.
├── logs
│   └── output.txt
└── script.py

To access the file, you need to specify the directory as follows:

with open('logs/output.txt', 'r') as f:
    data = f.read()

This way, Python will look for the output.txt file inside the logs folder.

Sometimes, you might also have a file located in a sibling directory of the script location as follows:

.
├── code
│   └── script.py
└── logs
    └── output.txt

In this case, the script.py file is located inside the code folder, and the output.txt file is located inside the logs folder.

To access output.txt, you need to go up one level from as follows:

with open('../logs/output.txt', 'r') as f:
    data = f.read()

The path ../ tells Python to go up one level from the working directory (where the script is executed)

This way, Python will be able to access the logs directory, which is a sibling of the code directory.

Alternatively, you can also specify the absolute path to the file instead of a relative path.

The absolute path shows the full path to your file from the root directory of your system. It should look something like this:

# Windows absolute path
C:Userssebhastiandocumentslogs

# Mac or Linux
/home/user/sebhastian/documents/logs

Pass the absolute path and the file name as an argument to your open() function:

with open('C:Userssebhastiandocumentslogsoutput.txt', 'r') as f:
    data = f.read()

You can add a try/except statement to let Python create the file when it doesn’t exist.

try:
    with open('output.txt', 'r') as f:
        data = f.read()
except FileNotFoundError:
    print("The file output.txt is not found")
    print("Creating a new file")
    open('output.txt', 'w') as f:
        f.write("Hello World!")

The code above will try to open and read the output.txt file.

When the file is not found, it will create a new file with the same name and write some strings into it.

Also, make sure that the filename or the path is not misspelled or mistyped, as this is a common cause of this error as well.

Error from os.listdir() function

You can also have this error when using a function from the os module that deals with files and directories.

For example, the os.listdir() is used to get a list of all the files and directories in a given directory.

It takes one argument, which is the path of the directory you want to scan:

import os

files = os.listdir("assets")
print(files)

The above code tries to access the assets directory and retrieve the names of all files and directories in that directory.

If the assets directory doesn’t exist, Python responds with an error:

Traceback (most recent call last):
  File ...
    files = os.listdir("assets")
FileNotFoundError: [Errno 2] No such file or directory: 'assets'

The solution for this error is the same. You need to specify the correct path to an existing directory.

If the directory exists on your system but empty, then Python won’t raise this error. It will return an empty list instead.

Also, make sure that your Python interpreter has the necessary permission to open the file. Otherwise, you will see a PermissionError message.

Conclusion

Python shows the FileNotFoundError: [Errno 2] No such file or directory message when it can’t find the file or directory you specified.

To solve this error, make sure you the file exists and the path is correct.

Alternatively, you can also use the try/except block to let Python handle the error without stopping the code execution.

Каждый пользователь, рано или поздно сталкивается с определенными проблемами в своей операционной системе Linux. Это может быть просто неправильное использование команд или их непонимание, так и такие серьезные ошибки Linux, как отсутствие драйверов, неработоспособность сервисов зависание системы и так далее.

Эта статья ориентирована в первую очередь на новичков, которые не знают, что делать когда их будут поджидать проблемы linux, мы дадим общую концепцию и попытаемся показать в какую сторону двигаться дальше. Мы рассмотрим исправление ошибок в linux как простых, так и более сложных. Но давайте сначала определим, какие проблемы linux будем рассматривать, разобьем их на категории:

  • Проблемы с командами в терминале
  • Проблемы с программами
  • Проблемы с драйверами и ядром
  • Проблемы с графической оболочкой
  • Проблемы с диском и файловой системой

Все это мы рассмотрим ниже, но сначала общее введение и немного теории.

Linux очень сильно отличается от WIndows, это заметно также при возникновении проблем Linux. Вот допустим, произошла ошибка в программе Windows, она полностью закрывается или выдает непонятное число с кодом ошибки и все, вы можете только догадываться или использовать поиск Google, чтобы понять что произошло. Но в Linux все совсем по-другому. Здесь каждая программа создает лог файлы, в которых мы можем при достаточном знании английского или даже без него, выяснить, что произошло. Более того, если программу запускать из терминала, то все ошибки linux и предупреждения мы увидим прямо в окне терминала. и сразу можно понять что нужно делать.

Причем вы сможете понять что произошло, даже не зная английского. Главным признаком ошибки есть слово ERROR (ошибка) или WARNING (предупреждение). Рассмотрим самые частые сообщения об ошибках:

  • Permission Denied — нет доступа, означает что у программы нет полномочий доступа к определенному файлу или ресурсу.
  • File or Directory does not exist — файл или каталог не существует
  • No such file or Directory — нет такого файла или каталога
  • Not Found — Не найдено, файл или ресурс не обнаружен
  • Connection Refused — соединение сброшено, значит, что сервис к которому мы должны подключиться не запущен
  • is empty — означает, что папка или нужный файл пуст
  • Syntax Error — ошибка синтаксиса, обычно значит, что в конфигурационном файле или введенной команде допущена ошибка.
  • Fail to load — ошибка загрузки, означает что система не может загрузить определенный ресурс, модуль или библиотеку (fail to load library) обычно также система сообщает почему она не может загрузить, permission denied или no such file и т д.

Сообщения об ошибках, кроме терминала, мы можем найти в различных лог файлах, все они находятся в папке /var/log, мы рассматривали за какие программы отвечают определенные файлы в статье просмотр логов linux. Теперь же мы подробнее рассмотрим где и что искать если linux выдает ошибку.

Проблемы с командами в терминале

Обычно проблемы с командами в терминале возникают не из-за ошибки linux или потому, что разработчики что-то недоработали, а потому, что вы ввели что-то неправильно или предали не те что нужно опции.

Если были переданы не те опции, то, скорее всего, программа покажет вам справку, ознакомившись с которой вы сможете очень быстро понять в чем проблема. Также справку выдают множество команд если их запустить без параметров.

Также довольно частой ошибкой при выполнении команд есть неиспользование команды sudo перед самой командой для предоставления ей прав суперпользователя. В таких случаях вы обычно получаете ошибку Permission Denied или просто уведомление, что не удалось открыть тот или иной файл или ресурс: can not open …, can not read … и так далее.

Если файла, которого вы передали в параметрах не существует, то вам будет об этом сказано соответствующим сообщением. Сообщения могут быть и более специфичные, в зависимости от ошибки, но в конце концов, вы можете воспользоваться переводчиком Google, чтобы понять смысл того, что хочет система.

Очень распространенной среди новичков ошибкой, есть no such file or directory при попытке выполнить файл, скачанный из интернета. Сразу кажется что это бред, ведь файл существует, но на самом деле оболочка ищет только файлы с флагом исполняемый, а поэтому пока вы не установите этот флаг для файла, он для оболочки существовать не будет.

Проблемы в программах

Если ни с того ни с сего закрывается или не так, как требуется работает, какая-нибудь графическая программа, решение проблем linux начинается из запуска ее через терминал. Для этого просто введите исполняемый файл программы и нажмите Enter. Обычно достаточно начать вводить имя программы с маленькой буквы и использовать автодополнение для завершения ввода названия.

В терминале программа, скорее всего, покажет почему она не работает. Также у многих программ поддерживается опция -v или —verbose. Вы можете попробовать использовать эту опцию, если первый запуск в терминале ничего не дал. Далее, когда уже есть сообщение об ошибке, вы можете попытаться исправить его сами, если поняли в чем дело или попытаться найти решение на формуме, скорее всего, другие пользователи уже решили вашу проблему. Но если нет, вы можете создать новую тему и описать там свою ошибку. Но без вывода программы в терминале вам вряд ли помогут.

Многие ошибки системы linux, связанные с графической оболочкой вы можете найти в файле ~/.xsession-errors в вашей домашней директории. Если оболочка работает медленно, зависает или не работают другие программы, но в других логах причин этому нет, возможно, ответ находится именно в этом файле.

Также ошибки linux могут возникать не только в обычных программах но и в работающих в фоне сервисах.  Но их тоже можно решить, чтобы посмотреть сообщения, генерируемые сервисом, запущенным с помощью systemd, просто наберите команду просмотра состояния сервиса:

$ sudo systemctl status имя_сервиса

Дальше вы знаете, что делать с этой ошибкой, главное что у вас есть зацепка, а дальше все можно решить, ну или почти все.

Здесь, как и всегда большинство ошибок связано с тем, что что-то не установлено, какого-то файла нет или к чему-то невозможно получить доступ, тогда решение проблем linux не вызовет много забот.

Проблемы с драйверами и ядром

Проблемы с драйверами, модулями ядра или прошивками могут вызвать много неприятностей во время загрузки системы. Это может быть просто медленная загрузка системы, неработоспособность определенных устройств  неправильная работа видео или полная невозможность запустить графическую подсистему. Исправление ошибок Linux начинается с просмотра логов.

Вы можете посмотреть все сообщения ядра с момента начала загрузки, выполнив команду чтобы узнать какую linux выдает ошибку:

sudo dmesg

Чтобы иметь возможность удобно листать вывод можно выполнить:

sudo dmesg | less

Или сразу выбрать все ошибки:

sudo dmesg | grep error

Дальше будет очень просто понять какого драйвера не хватает, что система не может загрузить или что нужно установить. Если возникает ошибка ввода-вывода linux, то, скорее всего, драйвер несовместим с вашим устройством, в таком случае, может помочь обновление ядра, чтобы получить самую новую версию драйвера. В некоторых случаях ядро может само предложить вариант решения проблемы прямо в сообщении об ошибке вплоть до того какую команду выполнить или какой файл скачать. Если же нет, вы все еще можете воспользоваться поиском для решения своей проблемы linux.

Проблемы с графической оболочкой

Когда проблемы linux касаются графической оболочки, то решить их новичкам не так уж просто. Больше всего потому что доступен только терминал. Графическая оболочка может просто зависнуть или вовсе не запускаться, например, после обновления.

При проблемах с графической оболочкой вы можете всегда переключиться в режим терминала с помощью сочетания клавиш Ctrl+Alt+F1. Далее, вам нужно ввести логин и пароль, затем можете вводить команды терминала.

Посмотреть логи графической оболочки вы можете в том же файле ~/.xsession-erros.

Если проблема наблюдается после обновления до новой версии, то можно очистить кеш и удалить папку с настройками, обычно это помогает.

Проблемы с диском и файловой системой

Самая частая проблема с диском у новичков — это переполнение диска. Если под диск выделить очень мало места, то он переполнится и система не сможет создавать даже временные файлы, а это приведет к тому что все если не зависнет, то, по крайней мере, не сможет нормально работать.

Если это случилось, вам, скорее всего, придется переключиться в режим терминала и удалить несколько файлов. Вы можете удалять файлы логов или кэша пакетного менеджера. Много файлов удалять не нужно, достаточно освободить несколько мегабайт, чтобы прекратились ошибки системы linux и нормально работала графическая оболочка, а затем уже в ней решать все проблемы linux.

Выводы

Теперь исправление ошибок Linux будет для вас немного проще. Ошибки системы linux довольно сложная тема и этой информации явно мало, если у вас остались вопросы или есть предложения по улучшению статьи пишите в комментариях!

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Creative Commons License

Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна .

Понравилась статья? Поделить с друзьями:
  • Выдает ошибку kmode exception not handled
  • Выйди уже на улицу соверши уже ошибку
  • Выдает ошибку java на телефоне
  • Вызвав ошибку операционной системы 5 отказано в доступе
  • Выдает ошибку invalid signature detected